2015-04-01 35 views
1

哪一个是当前在基数2^64到其他基数之间转换的最快方法? “任何其他基地”,我的意思是任何基地本身小于2^64。我认为它使用基于分而治之的方法和伯恩斯坦缩放余数树?
一些更多细节:我特别想将未来版本的IsItNormal不同基地中的一些着名常量超过10亿位数转换。 我可以使用两种方法:
1.在我希望的每个基数中计算该常数的十亿位数。
2.从某处(例如y-cruncher)获取数字,然后转换为我希望的每个基地。
我打算使用方法#2,因为它看起来更快。在任意精度浮点算法中两个基数之间转换的最快方法,数量超过十亿位

回答

1

就我所知,可以在O(N * log(N))操作中使用FFT进行大整数乘法和快速sqrt算法。基本思想如下。对于基数b1中的k个数字的大整数X,找到两个整数Y & Z,使得Y & Z都不超过k/2个数字,并且X = Y * Y + Z。 (注意Z可以是负数)。这可以简单地通过执行sqrt(X)操作完成,然后让Y为sqrt(X)的最接近整数,Z为余数。

步骤2.转换Y均从基体B1 &Ž成碱B2,递归地使用步骤1

步骤再次使用公式X = Y * Y + Z在碱B2 3.计算X;

然后,剩余部分是如何SQRT(X)在O(N *日志(N))的时间,这里的方法:

设X0 SQRT(X)的=估计; 继续做x0 =(X/x0 + x0)/ 2直到它收敛;

这里又出现了另一个问题:如何计算O(N * log(N))时间的1/X?方法是:

let x0 = 1/X的估计; 继续做x0 =(2-X * x0)* x0直到它收敛;使用FFT计算O中的大数相乘(N log(N)),则整个算法可以被优化为O(Nlog(N))。

相关问题