6

Intel 64 ビット プラットフォームでの long double の実際の精度は? 128または実際の128ビットにパディングされた80ビットですか?

前者の場合、gmp を使用する以外に、真の 128 精度を達成するための別のオプションはありますか?

4

4 に答える 4

9

x86-64 の精度は通常の x86 と同じです。拡張 double は 80 ビットで、x87 ISA を使用し、6 つのパディング バイトが追加されます。128 ビット FP ハードウェアはありません。

ただし、4 倍精度または拡張 4 倍精度のソフトウェア実装は、x86-64 64x64 => 128 整数乗算命令の恩恵を受ける可能性があります。

于 2010-05-10T00:16:09.810 に答える
4

MPFRの使用をお勧めします。これは、GMP の上に構築された、より洗練された多倍精度浮動小数点ライブラリです。

于 2010-05-10T05:43:22.540 に答える
2

コンパイラは x87 命令の代わりにスカラー SSE2 を発行しているため、(コンパイラと OS に応じて) 両方が 64 ビットである可能性が高くなります。

x86 は 80 ビットよりも高い精度をサポートしていませんが、FP アルゴリズムに 64 ビット以上が本当に必要な場合は、力ずくで問題を解決するのではなく、数値を確認する必要があります。

于 2010-05-10T00:36:34.927 に答える
1

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 をコンパイルする手順を参照してください。

于 2019-05-16T16:17:43.273 に答える