作者LPH66 (IWH68S0XZ8M89)
看板puzzle
标题Re: [问题] Rhapsody of Pi
时间Thu Jan 17 10:02:20 2008
※ 引述《yjd (origin of love)》之铭言:
: 2. 现在你面对着一面湖 手上有两个容器
: 其容积分别为π(3.14159...) 及 e(2.71828...)公升
: 我现在很机车的想要一公升的水在其中一个容器里
: 你要怎麽倒水才能得之呢?
: 条件松一点 容许有1%的体积误差
: 试着想想吧! :)
估计一下
π可以近似为355/113
__ ____
e = 2.7182818284...近似为 2.718 = 299/110 (不近似为 2.71828 是因为太难算了)
又我们能找出 299*19 - 355*16 = 1
也就是 299/110的110*19=2090倍 和355/113的113*16=1808倍 差1
实际计算是 2090e - 1808π = 1.20950 20%...差太多了
换一种方式 将π和e表示成连分数 取渐近分数来逼近
(见
http://zh.wikipedia.org/wiki/%E8%BF%9E%E5%88%86%E6%95%B0 )
π = [3; 7, 15, 1, 292, 1, 1, ...]
得到渐近分数为 3, 22/7, 333/106, 355/113, 103993/33102, ...
e = [2; 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, ...]
得到渐近分数为 2, 3, 8/3, 11/4, 19/7, 87/32, 106/39, 193/71, 1264/465, ...
其中观察到 22/7的7*4=28倍为88 和 87/32的32倍为87 差1
因此计算 28π - 32e = 0.97958 差2.1% 有改进了
接下来...取哪个连分数似乎都不好计算
尤其因为π的连分数在很前面一项出现了292 让後续的分数的分子/分母都很大
然後如果计算出来的倍数又很大的话 渐进分数的误差会扩大
就会出现上面20%的惨剧
因此转而求助程式
--
用程式跑的结果
5e-4π = 1.02504 2.5%
9π-10e = 1.09152 9.1%
15π-17e = 0.91310 8.7%
20e-17π = 0.95856 4.2%
28π-32e = 0.97958 2.1%
42e-36π = 1.07050 7%
41π-47e = 1.04605 4.6%
57e-49π = 1.00402 0.4% -- 第一个符合要求的
60π-69e = 0.93411 6.6%
72e-62π = 0.93755 6.3%
73π-84e = 1.00059 0.059% -- π/e的系数700以内最好的
再下去要到
814e-704π = 1.00018 0.018% -- π/e系数5600以内最好的结果
下一个是
5634π-6511e = 1.0000252 0.0025% -- π/e系数27000以内最好的结果
再下去...实作大概就有麻烦了 XD
--
那麽就拿73π-84e来实作:
首先 有一个步骤可以让水增加π-e 称它动作(*):
将剩余的水倒到e桶里 把π桶填满 用π桶的水倒满e桶 把e桶倒掉
因为π-e大约是0.42 几次之後e桶会快满出来
在下一次次时就多做一次"用π桶的水倒满e桶 再把e桶倒掉"的动作即可
称(*)加上上面的那步叫(#)
所以 总共只要做73次的(*)或(#)即可
因为一次的(*)或(#)恰包含一次把π桶填满 即表示+π
因此 方法是这样的:
重覆以下步骤73次:
a. 把π桶的水倒进e桶
b. 用π桶舀满水
c. 用π桶的水把e桶填满
d. 把e桶倒光 //到这里是(*)
e. 如果π桶里剩的水比e桶容量多 重覆c.d.一次 //到这里是(#)
这样最後π桶里就会剩下1.00059公升的水
--
其实要实作57e-49π也是可以
这样上面的方法的π/e两个桶子的角色就要对换
换成e桶舀水 π桶倒水
也就是:
重覆以下步骤57次:
a. 把e桶的水倒进π桶
b. 用e桶舀满水
c. 用e桶的水把π桶填满
d. 如果π桶满了就把它倒掉
这样最後e桶里就会剩下1.00402公升的水
--
'You've sort of made up for it tonight,' said Harry. 'Getting the
sword. Finishing the Horcrux. Saving my life.'
'That makes me sound a lot cooler then I was,' Ron mumbled.
'Stuff like that always sounds cooler then it really was,' said
Harry. 'I've been trying to tell you that for years.'
-- Harry Potter and the Deathly Hollows, P.308
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.84
1F:推 rehearttw:强!推! 01/18 00:49
2F:推 yjd:这篇太详细了!! 大推荐! 01/18 01:14
3F:推 hcldesmond:推 04/20 21:27