23

を持っている場合、それintをに変換してから、元に戻すと、最初に使用したのと同じ値を取り戻すことが保証されますか?言い換えれば、この関数が与えられた場合:doubledoubleint

int passThroughDouble(int input)
{
  double d = input;
  return d;
}

passThroughDouble(x) == xはすべてintのsについてそれを保証しxますか?

4

2 に答える 2

30

いいえ、そうではありません。int標準では、との相対的なサイズについては何も述べていませんdouble

int64ビット整数でdoubleあり、が標準のIEEE倍精度である場合、。より大きい数値ではすでに失敗します2^53


intはいえ、今日のほとんどの環境ではまだ32ビットです。したがって、多くの場合、それはまだ保持されます。

于 2012-12-03T22:59:32.703 に答える
12

浮動小数点型の「従来の」IEEE-754スタイルの表現に考慮を限定すると、型の仮数にdouble非ビットと同じ数のビットがある場合にのみ、この変換が値を保持することが期待できます。タイプの符号ビットint

従来のIEEE-754doubleタイプの仮数は53ビット幅(「暗黙の」先行ビットを含む)です。これは、[-2^53, +2^53]範囲内の整数を正確に表すことができることを意味します。この範囲外のすべては、一般的に精度を失います。

intだから、それはすべてあなたがあなたと比較される幅に依存しますdouble。答えは特定のプラットフォームによって異なります。32ビットintとIEEE-754ではdouble、同等性が維持されます。

于 2012-12-04T00:15:58.410 に答える