大きな数値(浮動小数点数、double int、その他のデータ型の範囲を超える)で算術演算を行うアルゴリズムが必要です。私はC言語でコードを書く必要があります。Knuth、Donald、コンピュータプログラミングの技術、ISBN 0-201-89684-2、第2巻:Seminumerical Algorithms、Section 4.3.1:古典的アルゴリズムしかしそれに耐えられなかった。私はコードではなくアルゴリズムが必要です。非常に大きな数値で算術演算を行うアルゴリズム
答えて
私が知る限り、単純な線形O(n)アルゴリズムよりはるかに良くなるわけではありません。とにかく、入力全体を読む必要があるので、少なくとも直線的です。あなたは定数を得るために様々なトリックを行うことができるかもしれません。
あなたの主な問題は、基本的な長い乗算アルゴリズムの2次的性質のために、乗算になります。 hereと与えられたいくつかのはるかに高速な方法の1つを考えてみてください。 Karatsubaメソッドはうまく実装するのが少し難解ですが、おそらく最も簡単なアルゴリズムであり、これはあなたに利益を与えるでしょう。それ以外の場合は、Schönhage-Strassen's algorithmやFürer's algorithmなど、高速フーリエ変換の方法をもう少し見ていく必要があります。
Big O notationも参照してください。
私は学校プロジェクトのために、1年生の大学生として単純なFFTベースの乗算(〜Fürerの方法)をC言語で実装しました。数字レシピには興味深いものがいくつかありますが、それほど難しいものではありません。 –
Knuth vol 2またはCrandallとPomeranceを読んでください。コーディングのために、Karatsubaまたはフーリエ変換に移行する前に、明白なアルゴリズムが最初に機能するようにすることをお勧めします。
書籍因数分解のための素数と計算機方法には、多精度演算のための読みやすいコードが付いています。
非常に大きな数値に対して算術演算を実行するアルゴリズムはありません。算術演算は同じままです。 http://www.codeproject.com/KB/cs/BigInt.aspx
私は、Karatsubaアルゴリズムは大きな数の算術演算を実行するのが最善であると考えます。十分大きなnに対して、Schönhage-Strassenアルゴリズムの一般化はさらに高速です。 あなたが大規模な数としてリンクされたリストを使用することができ、宿題のために Karatsuba または Karatsuba_Multiplication
- 1. 算術演算のブルートフォース検索アルゴリズム
- 2. 数値:数値が算術演算の場合は実行コマンド
- 3. enum値の算術演算
- 4. 非常に長いデシマルの算術演算
- 5. 指数値の算術演算
- 6. 算術演算を実行するPig
- 7. Javaでの算術演算
- 8. Springプロパティで算術演算を行うには?
- 9. Cプログラミング!算術演算子演算
- 10. AngularJS:算術演算子を数値に変換する
- 11. 非常に小さな数値のbcmath演算
- 12. 算術演算を行うために複数の行の結果を使用
- 13. y(x)関数の算術演算R
- 14. プリミティブクラス変数の算術演算
- 15. 複数のVBAユーザーフォームの算術演算
- 16. where句のテキストフィールドで算術演算を行う方法は?
- 17. Apache sparkでjoinExpressionの算術演算を行う方法
- 18. インポートされたCSVデータの算術演算を行うには?
- 19. 算術演算がオーバーフロー
- 20. オーバーロード算術演算子
- 21. C++の算術演算
- 22. 算術演算 - JavaScriptの
- 23. c#算術演算のリスト
- 24. doctrine QueryBuilderの算術演算
- 25. Stackdriverモニタリングチャートの算術演算
- 26. ユーザーフォームの算術演算
- 27. int - Javaの算術演算
- 28. オブジェクトの算術演算
- 29. GA-並列演算時に "非数値引数を2項演算子に戻す"アルゴリズム
- 30. Rails Activeステートメントを使用して算術演算を行うレコード
にアルゴリズムを探すことができます。リスト内の単一のノードは、その番号の1桁を保持します。 –
GMP(http://gmplib.org/)やJavaの 'BigInteger'クラスのような既存のライブラリをいつでもリバースエンジニアリングすることができます。ソースコードはhttp://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/math/java/math/BigInteger.java.htmから入手できます。 –
人間は、どうやって非常に大きな数値で算術演算を実行しますか?あなたのアルゴリズムは、少なくとも出発点です... –