5

すべての行列値が整数である行列乗算を計算しているため、質問します。

LAPACK を使用して、正しいコードを高速に取得したいと考えています。2^53sとして格納されている2 つの大きな整数 (積が より小さい)doubleを乗算するとdouble、正確な整数の結果を含む が得られますか?

4

2 に答える 2

6

あなたの分析は正しいです:

  • -2 53から 2 53までのすべての整数は、倍精度で正確に表現できます。
  • IEEE754 標準では、計算を正確に実行し、表現可能な最も近い数値に丸める必要があります。

したがって、その範囲内の整数に等しい 2 つの値の積は正確に表現されます。

参照: すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと。重要なセクションは、操作に関する IEEE 標準の説明です。これには、上記の 2 番目の箇条書きのステートメントが含まれています。あなたはすでに最初の箇条書きを知っており、議論を完了するのは 2 番目の点です。

于 2012-12-27T22:11:34.880 に答える
4

はい!double のデータは、符号、指数、および小数に分割されます。

ウィキペディアには、表現可能な数値の範囲を説明する記事があります

ダブルバイト

-2^53 から 2^53 までの整数はすべて倍精度で表現できます。

2^52=4,503,599,627,370,496 と 2^53=9,007,199,254,740,992 の間では、表現可能な数値は正確に整数です。2^53 から 2^54 までの次の範囲では、すべてが 2 で乗算されるため、表現可能な数値は偶数になります。逆に、2^51 から 2^52 までの前の範囲では、間隔は 0.5 です。など

于 2012-12-27T22:12:40.517 に答える