我想操纵真正的大数字,我正在尝试使用数组。我已经实现了乘法运算,但现在我想实现除法运算。
我想知道我应该使用哪种算法?是否可以使用Newton–Raphson division算法,或者我应该使用我们在学校学到的算法?
PS:我知道有很多图书馆可以使用大数字,但我想这样做是为了练习。
答案 0 :(得分:2)
这些是我最喜欢的算法:
二元分割
看这里:http://courses.cs.vt.edu/~cs1104/BuildingBlocks/divide.030.html
这是你应该开始的。它不是那么慢而且很简单。在开始之前,不要忘记正确测试+, -, <<, >>
操作。他们应该在任何给定的输入上完美地工作
分成一半的算术
看这里:https://stackoverflow.com/a/19381045/2521214
只需稍加调整即可将其调整为数组。使用+, -, *, /, %
。如果你正确编码它应该比二进制除法快得多。
近似分裂
看这里:https://stackoverflow.com/a/18398246/2521214
或者对于某些加速x ^ 2,x * y这里:Fast bignum square computation
这更适合浮动/定点分割。这有点难以理解,但速度和准确性值得一试。此外,还有许多其他近似算法,所以google!