mathe 发表于 2008-4-29 12:06:09

我觉得medie的方法比较好,但是需要加代码判断一下计算误差引起的问题。

medie2005 发表于 2008-4-29 12:09:42

是啊,确实出了问题:
已经发现了一个错误:m==636.

无心人 发表于 2008-4-29 13:44:29

:)

我书里有部分我自己算的结果
等我回家去对照

无心人 发表于 2008-4-29 13:47:23

:)
:lol

错误太多

无心人 发表于 2008-4-29 13:48:54

:)

我觉得
完全可以计算2^n到n=20000
然后针对部分n使用你的方法

计算2^n到20000, 应该不会超过100ms吧

mathe 发表于 2008-4-29 13:55:56

原帖由 无心人 于 2008-4-29 13:48 发表 http://images.5d6d.net/dz60/common/back.gif
:)

我觉得
完全可以计算2^n到n=20000
然后针对部分n使用你的方法

计算2^n到20000, 应该不会超过100ms吧
我觉得不会快,一直使用累加的方法实O(n^2)的算法。medie的方法是O(n)的。

无心人 发表于 2008-4-29 14:11:19

可累加一次是能得到最多4个结果的啊

无心人 发表于 2008-4-29 14:22:13

考虑取前32位十进制数字,则使用5个双字,每个保存8个十进制
一旦第五个产生进位,则抛弃首双字,顺序移动,以产生新的5个双字

这么做加法

请问,还是O(n)的么?
误差积累在100000次加法后,大概多大?

无心人 发表于 2008-4-29 14:33:47

:)

我觉得
总误差应该不会在一个双字之外

即会至少有两个双字的结果是正确的

mathe 发表于 2008-4-29 15:00:55

我倒是觉得还是采用medie的算法比较快,毕竟是O(n)的算法。
不过计算需要采用GMP之类的工具。
开始只需要采取普通精度进行计算,当然计算过程中需要判断是否精度不过,如果发现精度不够
那么我们需要提高精度计算对应参数m下的c1,c2,还有log10_2就可以了。
从理论上,应该对于大部分情况,低精度的计算足够了,只需要对于少数情况,需要用到高精度。
还有m正好是10的幂的情况需要特殊处理。
当然仅仅对于这个题目而言,我觉得没有必要,4位数的m不是很高的要求
页: 1 [2] 3
查看完整版本: 来点有意思的问题,2的方幂的开始数字问题