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