Division with really big numbers

£可爱£侵袭症+ 提交于 2019-12-02 10:05:02

问题


I was just wondering what different strategies there are for division when dealing with big numbers. By big numbers, I mean ~50 digit numbers .

e.g. 9237639100273856744937827364095876289200667937278 / 8263744826271827396629934467882946252671

When both numbers are big, long division seems to lose its usefulness...

I thought one possibility is to count through multiplications of the divisor until you go over the dividend, but if it was the dividend in the example above divided by a small number, e.g. 4, then that's a huge amount of calculations to do.

So, is there simple, clean way to do this?


回答1:


What language / platform do you use? This is most likely already solved, so you don't need to implement it from scratch. E.g. Haskell has the Integer type, Java the java.math.BigInteger class, .NET the System.Numerics.BigInteger structure, etc.

If your question is really a theoretical one, I suggest you read Knuth, The Art of Computer Programming, Volume 2, Section 4.3.1. What you are looking for is called "Algorithm D" there. Here is a C implementation of that algorithm along with a short explanation: http://hackers-delight.org.ua/059.htm




回答2:


Long division is not very complicated if you are working with binary representations of your numbers and probably the most efficient algorithm.




回答3:


if you don't need very exact result, you can use logarithms and exponents. Exponent is the function f(x)=e^x, where e is a mathmaticall constant equal to 2.71828182845...
Logarithm (marked by ln) is the inverse of the exponent.

Since ln(a/b)=ln(a)-ln(b), to calculate a/b you need to:
Calculate ln(a) and ln(b) [By library function, logarithm table or other methods]
substruct them: temp=ln(a)-lb(b)
calculate the exponent e^temp



来源:https://stackoverflow.com/questions/12233968/division-with-really-big-numbers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!