15

ええ、私は80-bitと言うつもりでした。あれはタイプミスじゃない…

私の浮動小数点変数の経験では、single (32 ビット)、double (64 ビット)、long double (96 ビットまたは 128 ビットと呼ばれる) などの 4 バイトの倍数が常に関係していました。そのため、 AIFF (Audio Interchange File Format) ファイルを読み書きするコードを作成しているときに、 80 ビットの拡張精度データ型に遭遇したとき、少し混乱しました。サンプリングを格納するために拡張精度変数が選択されました。オーディオトラックのレート。

ウィキペディアをざっと見てみると、 IEEE 754-1985 標準の概要に 80 ビット形式の簡単な言及と共に上記のリンクが見つかりました(ただし、IEEE 754-2008 標準の概要にはありません)。特定のアーキテクチャでは、「extended」と「long double」は同義語のようです。

私が遭遇していないことの 1 つは、拡張精度データ型 (もちろん、AIFF ファイルのサンプリング レートを除く) を利用する特定のアプリケーションです。これにより、私は疑問に思いました:

  • 一部のプログラミングアプリケーションで拡張精度が必要/有益である状況に遭遇した人はいますか?
  • 明らかな「double よりも精度が高いが、long double のほとんどの実装よりもバイト数が少ない」以外に、80 ビット浮動小数点数の利点は何ですか?
  • その適用性は薄れていますか?
4

5 に答える 5

25

Intel の FPU は内部で 80 ビット形式を使用して、中間結果の精度を高めます。

つまり、32 ビットまたは 64 ビットの変数を使用できますが、それらが FPU レジスタにロードされると、80 ビットに変換されます。その後、FPU は (デフォルトで) すべての計算を 80 で実行します。計算後、結果は 32 ビットまたは 64 ビットの変数に格納されます。

ところで-これのやや残念な結果は、デバッグビルドとリリースビルドがわずかに異なる結果を生成する可能性があることです.リリースビルドでは、オプティマイザは80ビットFPUレジスタに中間変数を保持する可能性がありますが、デバッグビルドでは格納されます64 ビット変数では、精度が失われます。これを回避するには、80 ビット変数を使用するか、FPU スイッチ (またはコンパイラ オプション) を使用してすべての計算を 64 ビットで実行します。

于 2009-03-04T21:56:43.350 に答える
9

私にとって、80 ビットの使用は不可欠です。このようにして、対称行列の高次 (30,000) の固有値と固有ベクトルを、ベクトルの内積に GOTO ライブラリを使用すると、さらに 4 つの数字、つまり、私が相対論的アトミックで使用する種類の行列の 9 つの有効数字の代わりに 13 を取得します。負のエネルギー状態の海に陥るのを避けるために必要な計算。私の他のオプションは、CPU 時間を 60 ~ 70 倍増加させ、RAM 要件も増加させる 4 倍精度演算を使用することです。大きなベクトルの内積に依存する計算にはメリットがあります。もちろん、部分的な内積結果をレジスタ内に保持するには、GOTO ライブラリのようにアセンブラ言語を使用する必要があります。これが、私が古い Opteron 850 プロセッサを愛するようになった理由です。

80 ビットが高速である理由は、CPU の標準浮動小数点ハードウェアが 80 ビット レジスタを備えているためです。したがって、追加の 16 ビット (11 の仮数の追加ビット、指数の 4 つの追加ビット、および実質的に未使用の 1 つの追加ビット) が必要な場合、64 ビットから 80 ビットに拡張するのにそれほどコストはかかりません。 80 ビットを超えると、実行時間の点で非常にコストがかかります。したがって、必要に応じて 80 ビット精度を使用することもできます。無料で使用できるわけではありませんが、かなり安価です。

于 2012-03-30T13:23:08.287 に答える
5

ウィキペディアは、80 ビット形式は情報を失うことなく 64 ビット整数全体を表すことができると説明しています。したがって、CPU の浮動小数点ユニットを使用して、整数の乗算と除算を実装できます。

于 2009-03-04T21:56:35.033 に答える
1

私はいくつかの純粋数学の研究に80ビットを使用しました。ダブルスの範囲外で、かなり大きくなる無限級数の項を合計する必要がありました。収束と精度は問題ではなく、1E1000のような大きな指数を処理する機能だけでした。いくつかの巧妙な代数は物事を単純化することができたかもしれませんが、それについて考えることに時間を費やすよりも、拡張精度でアルゴリズムをコーディングする方がはるかに迅速で簡単でした。

于 2010-01-18T17:07:48.760 に答える