Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Thanks for this. I just spent 30 minutes reading up on calculating pi with a simple Monte Carlo algo. Thinking about doing it d3.js...



It's an entertaining exercise, especially when you watch your computer chew away for several minutes before telling you that π is probably somewhere around 3.26.


Huh? You should get as close as 3.14 in less than a second if your random number source is decent.


I was wondering about this. Evidently the more random, the more accurate. Wacky!


Perhaps. I may be misremembering, or may have been using a particularly crappy RNG when I last did it. It was a long time ago.


How long ago? How much faster is current hardware?

If it was, say, a 4MHz machine, you both could be right.


Just for fun, and because I'd never done it before, I just threw together some Ruby to do this: https://gist.github.com/peterc/5019760

It gets to 3.14 within a second, about 30 seconds to 3.1415.. and Ruby is surely doing this in 100x the time C or Java would.

Update: Also did it for JavaScript - https://gist.github.com/peterc/5019804


You can optimize that JS code a lot by using the unit circle, limiting yourself to the first quadrant, and using multiplication instead of Math.pow(). Then you can make it branchless using a little bitwise trickery. The result is this: https://gist.github.com/osuushi/5022143 .

OK, so I was going to just do the unit circle thing. Then I got stuck in optimization mode. God I miss performance graphics programming.


It would have probably been on an 450 MHz G4, maybe 6-7 years ago, and if I had to guess, I'd say I probably did it in Python.


Calculating Pi with Monte Carlo is equivalent to calculating the Fibonacci series with the recursive formula.

It's a nice example but almost useless in practice.


I did it in Clojure once[1]. It's quite fun, I recommend it as well.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: