我只是想知道在处理大数字时有什么不同的策略。大数字,我的意思是~50位数字。
e.g。 9237639100273856744937827364095876289200667937278/8263744826271827396629934467882946252671
当这两个数字都很大时,长期划分似乎失去了它的用处......
我认为一种可能性是计算除数的乘法,直到你超过被除数,但如果它是上面例子中的被除数除以一个小数,例如4,那就是要做大量的计算。
那么,有这么简单,干净的方法吗?
答案 0 :(得分:2)
您使用什么语言/平台?这很可能已经解决了,因此您无需从头开始实施。例如。 Haskell具有Integer
类型,Java为java.math.BigInteger
类,.NET为System.Numerics.BigInteger
结构等。
如果你的问题确实是理论问题,我建议你阅读Knuth,计算机程序设计的艺术,第2卷,第4.3.1节。您正在寻找的是那里的“算法D”。以下是该算法的C实现以及简短说明: http://hackers-delight.org.ua/059.htm
答案 1 :(得分:1)
Long division并不复杂。
答案 2 :(得分:-1)
如果您不需要非常精确的结果,则可以使用对数和指数。
指数是函数f(x)= e ^ x,其中e是一个等于2.71828182845的数学常量...
对数(用ln标记)是指数的倒数。
由于ln(a / b)= ln(a)-ln(b),要计算a / b,你需要:
计算ln(a)和ln(b)[按库函数,对数表或其他方法]
子结构:temp = ln(a)-lb(b)
计算指数e ^ temp