2

最近、高精度演算用のGMPライブラリを紹介しました。使い方は簡単そうですが、最初のプログラムでは実際的な問題が発生しています。式はどのように評価されますか。たとえば、「1 + 8 * z ^ 2」があり、zがmpz_tの「大きな整数」変数である場合、これをすばやく評価するにはどうすればよいですか。(私が書いているプログラムには、より大きな式があります。)現在、私はすべての操作を手動で実行し、「1 + 8 * z^2」式の結果を次のような一時変数に格納しています。

1)最初にmpt_mul(z、z、z)を2乗zに実行します

2)次に、値8で「eight」と呼ばれるmpz_t変数を定義します。

3)ステップ1の結果にこの8を掛けて、一時変数に格納します。

4)値1で「one」と呼ばれるmpz_t変数を定義します。

5)これをステップ3の結果に追加して、最終的な答えを見つけます。

これは私がしていることになっていることですか?それとももっと良い方法はありますか?GMPのユーザーズマニュアルがあれば本当に役に立ちますが、リファレンスマニュアルしかありません。

4

2 に答える 2

3

GMPには、算術式をより簡単に表現する方法を提供するC++クラスインターフェイスが付属しています。このインターフェイスは、C ++演算子のオーバーロードを使用して、次のように記述できるようにします。

mpz_class z;
1 + 8 * z**2

もちろん、これはC++を使用していることを前提としています。Cのみを使用している場合は、演算子のオーバーロードを提供しないGMPへのCインターフェースを使用する必要がある場合があります。

于 2009-10-06T19:19:56.170 に答える
2

「expr」サブディレクトリに、サポートされていない式パーサーがGMPとともに配布されていることがわかりました。これはGMPの一部ではなく、変更される可能性がありますが、そのディレクトリのREADMEファイルで説明されています。可能な限り最速の方法で計算を行うことは保証されていないため、購入者は注意してください。

したがって、GMPを使用する場合、このライブラリを使用したり、独自の式パーサーを作成したりする場合を除き、ユーザーはすべての式を手動で評価する必要があります。

于 2009-10-07T23:47:20.133 に答える