高精度の演算が必要な数値処理を行っています。私はGNU MPライブラリを使用しており、GMPマニュアルによると:
「浮動小数点数または略して Float は、精度指数が制限された任意精度の仮数です。」
仮数は任意の精度を持つはずですが、まだ精度の問題が発生しています。私の実際のコードであなたを退屈させるのではなく、ここに私の問題を示す最小限に近い作業例を示します。このコードは、9.3^15、9.8^15、および (9.3*9.8)^15 を計算します。私のマシンでは、(9.3^15)*(9.8^15) と (9.3*9.8)^15 の値は 16 桁目以降から異なり始め、この場合は (約) 4.94* のエラーにつながります。 10^13。
どんな助けでも大歓迎です。以下のコード。
#include <gmp.h>
#include <gmpxx.h>
#include <iostream>
#include <iomanip>
int main()
{
mpf_class x, y, z;
x = y = z = 1.0;
for (int i = 0; i < 15; i++)
{
x *= 9.3;
y *= 9.8;
z *= 9.3*9.8;
}
std::cout << z - x*y << std::endl;
return 0;
}