1
greenymora 2012-01-31 03:13:14 +08:00
啊。在纠结计算时间的时候,看到这么一堆数字...
真想去喝酒算了...为什么我会纠结在php里面... |
2
aeryen 2012-01-31 04:53:24 +08:00
作业党表示希望成为蛋疼党的一员,但是自己又忙又懒……
|
3
Semidio 2012-01-31 05:19:56 +08:00
这个算法确实很蛋疼。
|
4
yyfearth 2012-01-31 08:18:57 +08:00
最好可以事实显示现在当前的点数和圈内的点数
|
5
kuno 2012-01-31 08:49:37 +08:00
如果点的分布是绝对平均的,最后不就是在计算圆的面积除以方形剩余的面积?
|
6
zythum OP 设圆的半径是R,那么圆的面积是R*R*PI,外面的正方形是2R*2R
那么面积比是PI/4 如果点是平均分布的,那么落在圆内的概率就是PI/4 那么就可以算出来了. |
8
makeabeeline 2012-02-02 14:51:34 +08:00
这是微积分投影法的应用哦
|
9
aoyoo 2012-02-02 15:13:03 +08:00
这算是蒙特卡罗算法么?
|
11
cmonday 2012-02-02 21:22:46 +08:00
所以一切顺利的话最后就会很接近 Math.PI 了是么…… = =
|
16
013231 2012-02-02 21:37:03 +08:00
没必要生成随机数. 遍历每一个点就可以了.
http://gist.github.com/1723500 |
19
013231 2012-02-02 21:48:47 +08:00
|
20
zythum OP 但是均匀遍历总感觉有问题... 你可以试试结果。
因为随机数的话只要时间够久肯定是可以精确的。(排除js语言本身的问题)。 但是均匀遍历这个算法不行。本身就有精确度上的问题 |
22
cmonday 2012-02-02 22:01:52 +08:00
@zythum
JS 要突破浮点数只能自己模拟了……以前学 C 的时候用过数组模拟大数类,理论上位数无限,就是效率差点。 还可以用两个数拼一下,这样就跟 double 一样了。 反正肯定要把加减乘除都重新封装一遍……很久没搞算法了,很头大啊 = = |
24
cmonday 2012-02-02 22:14:54 +08:00
@zythum 大数类还算蛮好理解的,就是写起来比较麻烦,尤其是要考虑效率的情况下……
我 Google 了一把果然有人拿 JS 写过大数的,这个是最基础的写法: http://www.silverna.org/blog/?p=67 这里有个用 JS + 割圆法算圆周率的,你可以参考下: http://blog.csdn.net/ncs2002/article/details/429821 |
26
013231 2012-02-02 22:25:43 +08:00
@zythum 随机分布为什么会比均匀分布更精确? 均匀分布只要你划分的更细就可以算得更精确呀, 而且速度比随机分布快许多(不用生成随机数).
以下是均匀分布的计算结果: 1000 * 1000: 3.145520 10000 * 10000: 3.141991 100000 * 100000: 3.141633 |
27
zythum OP @013231 举个例子把... 如果你均匀分布是间隔是0.1。那么就是0.1了。算完就完事了。如果要再精简的话要再算一次。而且只能全部算问才能知道结果。
如果是随机的话。可以近似与多加一个个例的前后都是均匀分布的。只是均匀分布是间隔一直在取向去变小。那么只要随着个例的增多可以一直下去。每次都是一个近似的至,个例每增加就可以增加精确的程度。 不知道朱一有木有说清楚。 |
29
013231 2012-02-02 22:56:05 +08:00
@zythum 我知道, 随机取样的计算过程是"在线的", 这是它的优势. 我所说的是, 同样多取样点的状况下均匀取样同样可行且速度更快. 不过从另一个角度说, 用蒙特卡洛法进行PI的高精度运算本身就是蛋疼行为= =b
|
30
eric_q 2012-02-03 09:07:47 +08:00
这东西真熟悉,8年前我在文曲星电子辞典上无聊时用BASIC编了个
|