在通常意义上,计算PI或者log(2)需要高精度运算的支持,而且需要从头开始算.
但是这里有一个有趣的算法却可以不受前面说到的两点的限制,它可以让你从任意位数计算PI或者log(2).而效率和计算位数基本上呈线性增长.
当然了"呈线性增长"不是一个好消息,事实上这个算法的效率是非常差的就和其它传统的PI计算算法来比较.不过它的分布式的特性的确很有趣,因此在这里我写了一个程序来测试这个算法.
你可以点击 http://arc.net.cn/dl/Pi_Plouffe.tar.bz2 下载源代码, 每一个进程用于计算一部分的PI小数, 最后的结果使用sort排序后就可以得到. 同样你也可以在源代码包中找到原始的算法论文和一段PI演奏的MIDI.
下面是一次的运行结果:
000000000 <- PID -> 3234 -> [ 3. ] 000000001 <- PID -> 3235 -> [ 141592653 ] 000000010 <- PID -> 3235 -> [ 589793238 ] 000000019 <- PID -> 3235 -> [ 462643383 ] 000000028 <- PID -> 3235 -> [ 279502884 ] 000000037 <- PID -> 3235 -> [ 197169399 ] 000000046 <- PID -> 3235 -> [ 375105820 ] 000000055 <- PID -> 3235 -> [ 974944592 ] 000000064 <- PID -> 3235 -> [ 307816406 ] 000000073 <- PID -> 3235 -> [ 286208998 ] 000000082 <- PID -> 3235 -> [ 628034825 ] 000000091 <- PID -> 3235 -> [ 342117067 ] 000000100 <- PID -> 3236 -> [ 982148086 ]