質問

最近、高精度の算術についてはGMPライブラリを紹介しました。使いやすいように思えますが、最初のプログラムでは、実際の問題に遭遇しています。表現はどのように評価されますか。たとえば、「1+8*Z^2」があり、zがMPZ_T "大整数"変数である場合、これを迅速に評価するにはどうすればよいですか? (私が書いているプログラムにはより大きな表現があります。)現在、私はすべてのすべての操作を手動で行っており、「1+8*Z^2」式:次のような一時的な変数に結果を保存しています。

1)最初にmpt_mul(z、z、z)をsquare zにします

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

3)ステップ1の結果をこの8を掛け、TEMP変数に保存します。

4)値1を持つ「One」と呼ばれるMPZ_T変数を定義します。

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

これは私がしているはずですか?それともより良い方法はありますか? GMPが人々を開始するためにユーザーマニュアルがあった場合、それは本当に役立ちますが、参照マニュアルのみがあります。

役に立ちましたか?

解決

GMPにはaが付属しています C ++クラスインターフェイス 算術式を表現するより簡単な方法を提供します。このインターフェイスでは、C ++オペレーターのオーバーロードを使用して、次のことを可能にします。

mpz_class z;
1 + 8 * z**2

もちろん、これはC ++を使用していると仮定しています。 Cのみを使用している場合は、オペレーターの過負荷を提供しないCインターフェイスをGMPに使用する必要がある場合があります。

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top