2016-03-31 14 views
0

GMP(GNU Multiple Precision Arithmetic Library)を使ってC++プログラムを改善しようとしています。mpf_classのイプシロン計算方法

倍精度浮動小数点数型(double)型の計算結果によって定期的に増加するカウンタ変数があります。 ISR(割り込みサービスルーチン)内で追加が発生するのは、これが高速であるためです。

これまでカウンタ変数はdouble型で問題を引き起こしていました。 いくつかのデバイス(年以来稼働しています)は、各追加が吸収されるポイントに達し、何も起こりません。 他のデバイスは既に小さな追加を破棄し始めています。

これは、mpf_classをdoubleの代わりに使用することで改善する予定です。 しかし、mpf_classのサイズを適切に設定するには、&εを知る必要があります。 (イプシロン)。

私の質問は:どのようにmpf_classオブジェクトのイプシロンを計算できますか?

この計算の例(C++)は優れています。

答えて

0

GMPのmpfタイプは、正確な基数2表現を提供しません。要求される精度は、基本となる配列要素のビット数で切り上げられ、少なくとも1つの追加要素が追加されます。典型的な32ビットシステムで53の精度を要求すると、実際の値は65〜96ビットで計算されます。 (技術的には、mpfタイプはこの場合基数2^32の算術演算を使用しています)。

代わりに、MPFR(丸め付きの複数精度浮動小数点型)ライブラリを参照することをお勧めします。基礎となる計算にはGMPライブラリを使用しますが、より予測可能な動作を提供します。 MPFRの使用は、GMPドキュメントの注記でお勧めします。

+0

私のシステムがより多くのメモリを使用しているかどうかを知ることは重要ではありません。私は可能な限り大きなイプシロンに興味があります。私はそれが要件を満たしているかどうかを確認するだけです。 mpfrがインストールされているのとは別に、私がそうしなければならない場合、私はそれを使うことができます。 mpfrの解決策を提供しても問題ありません。 – Sorko