を持っている場合、それintをに変換してから、元に戻すと、最初に使用したのと同じ値を取り戻すことが保証されますか?言い換えれば、この関数が与えられた場合:doubledoubleint
int passThroughDouble(int input)
{
double d = input;
return d;
}
私passThroughDouble(x) == xはすべてintのsについてそれを保証しxますか?
いいえ、そうではありません。int標準では、との相対的なサイズについては何も述べていませんdouble。
がint64ビット整数でdoubleあり、が標準のIEEE倍精度である場合、。より大きい数値ではすでに失敗します2^53。
とintはいえ、今日のほとんどの環境ではまだ32ビットです。したがって、多くの場合、それはまだ保持されます。
浮動小数点型の「従来の」IEEE-754スタイルの表現に考慮を限定すると、型の仮数にdouble非ビットと同じ数のビットがある場合にのみ、この変換が値を保持することが期待できます。タイプの符号ビットint。
従来のIEEE-754doubleタイプの仮数は53ビット幅(「暗黙の」先行ビットを含む)です。これは、[-2^53, +2^53]範囲内の整数を正確に表すことができることを意味します。この範囲外のすべては、一般的に精度を失います。
intだから、それはすべてあなたがあなたと比較される幅に依存しますdouble。答えは特定のプラットフォームによって異なります。32ビットintとIEEE-754ではdouble、同等性が維持されます。