Intel 64 ビット プラットフォームでの long double の実際の精度は? 128または実際の128ビットにパディングされた80ビットですか?
前者の場合、gmp を使用する以外に、真の 128 精度を達成するための別のオプションはありますか?
Intel 64 ビット プラットフォームでの long double の実際の精度は? 128または実際の128ビットにパディングされた80ビットですか?
前者の場合、gmp を使用する以外に、真の 128 精度を達成するための別のオプションはありますか?
x86-64 の精度は通常の x86 と同じです。拡張 double は 80 ビットで、x87 ISA を使用し、6 つのパディング バイトが追加されます。128 ビット FP ハードウェアはありません。
ただし、4 倍精度または拡張 4 倍精度のソフトウェア実装は、x86-64 64x64 => 128 整数乗算命令の恩恵を受ける可能性があります。
MPFRの使用をお勧めします。これは、GMP の上に構築された、より洗練された多倍精度浮動小数点ライブラリです。
コンパイラは x87 命令の代わりにスカラー SSE2 を発行しているため、(コンパイラと OS に応じて) 両方が 64 ビットである可能性が高くなります。
x86 は 80 ビットよりも高い精度をサポートしていませんが、FP アルゴリズムに 64 ビット以上が本当に必要な場合は、力ずくで問題を解決するのではなく、数値を確認する必要があります。
MPFR または GMP よりも Boost ラッパーをお勧めします。
ブースト 1.70: cpp_bin_float。
任意の精度の任意の型と同様に、次の型が提供されます。
cpp_bin_float_single (24 bits + mantissa = 32 bits)
cpp_bin_float_double (53 bits + mantissa = 64 bits)
cpp_bin_float_double_extended (64 bits + mantissa)
cpp_bin_float_quad (113 bits + mantissa = 128 bits)
cpp_bin_float_oct (237 bits) + mantissa = 256 bits)
Boost は、ほとんどすぐに使える機能を提供します。コンパイルしたら、Visual Studio プロジェクト内のインクルード ディレクトリとライブラリ ディレクトリにポインターを追加するだけです。
Visual Studio 2017 + Boost v1.70 でテスト済み。
boost をコンパイルする手順を参照してください。