分数真的很大

时间:2012-09-02 06:43:10

标签: math numbers division

我只是想知道在处理大数字时有什么不同的策略。大数字,我的意思是~50位数字。

e.g。 9237639100273856744937827364095876289200667937278/8263744826271827396629934467882946252671

当这两个数字都很大时,长期划分似乎失去了它的用处......

我认为一种可能性是计算除数的乘法,直到你超过被除数,但如果它是上面例子中的被除数除以一个小数,例如4,那就是要做大量的计算。

那么,有这么简单,干净的方法吗?

3 个答案:

答案 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