1

大きな数を扱うとき、除算にはどのような戦略があるのか​​ 疑問に思っていました. 大きな数字とは、〜50桁の数字を意味します。

例: 9237639100273856744937827364095876289200667937278 / 8263744826271827396629934467882946252671

両方の数が大きい場合、長い除算はその有用性を失うようです...

1 つの可能性として、被除数を超えるまで除数を掛け算する方法があると考えましたが、上記の例の被除数を 4 などの小さな数で割った場合、膨大な量の計算が必要になります。

それで、これを行う簡単できれいな方法はありますか?

4

3 に答える 3

2

どの言語/プラットフォームを使用していますか? これはおそらくすでに解決されているため、最初から実装する必要はありません。たとえば、Haskell にはInteger型、Java にはjava.math.BigIntegerクラス、.NET にはSystem.Numerics.BigInteger構造などがあります。

あなたの質問が本当に理論的なものであれば、Knuth の The Art of Computer Programming, Volume 2, Section 4.3.1 を読むことをお勧めします。あなたが探しているのは「アルゴリズムD」と呼ばれるものです。以下は、そのアルゴリズムの C 実装と簡単な説明です: http://hackers-delight.org.ua/059.htm

于 2012-09-02T06:51:17.467 に答える
1

数値のバイナリ表現とおそらく最も効率的なアルゴリズムを使用している場合、長い除算はそれほど複雑ではありません。

于 2012-09-02T06:50:38.327 に答える
-1

非常に正確な結果が必要ない場合は、対数と指数を使用できます。指数は関数 f(x)=e^x です。ここで、e は 2.71828182845 に等しい数学定数です...
対数 (ln でマーク) は指数の逆数です。

ln(a/b)=ln(a)-ln(b) なので、a/b を計算するに は
:
: temp=ln(a)-lb(b)
指数 e^temp を計算します

于 2012-09-02T06:52:24.003 に答える