すべての整数値は Double として正確に表現されますか?
整数を double に変換すると、完全な表現が維持されるかどうかという疑問が生じます。この記事では、浮動小数点演算の IEEE 754 標準を考慮して、このクエリに対処します。
Double Representation
Double は、いくつかのビットを使用して、仮数 * 2^exponent の形式を使用します。非整数部分の場合。十分な大きさの指数を設定すると、小数部分のみを使用して整数を表すことができます。
32 ビット整数
IEEE 754 倍精度は、最大 53 の整数に対応できます。ビット (52 仮数ビットと暗黙的な先頭ビット)。したがって、すべての 32 ビット整数は double として完全に表現できます。
64 ビット整数
ただし、この保証は 64 ビット整数には拡張されません。サイズが double 表現の容量を超えています。
実践例
この概念を説明するために、次のコード スニペットを考えてみましょう。
<code class="cpp">int a = 3; int b = 4; double d_a = a; double d_b = b; double int_sum = a + b; double d_sum = d_a + d_b; if (double(int_sum) == d_sum) { std::cout << "Same" << std::endl; }</code>
このコードは、32 ビット整数に対して一貫して「同じ」を出力し、それらが double として保存されていることを示します。
小数点の差
考慮すべきもう 1 つの側面は、double の可能性です。変換により小数点の差が生じますが、後で整数に戻す際に失われます。ただし、double 表現の指数関数的な性質により、これは不可能です。 2 つの double の間の最小の差は常に 2 のべき乗であり、丸めによって整数値が変更されることはありません。
結論
一方、32 ビット整数は可能です。は double として完全に表現できますが、これは 64 ビット整数には当てはまりません。それにもかかわらず、倍精度は、現実世界のほとんどの整数アプリケーションに対して十分な容量を提供します。
以上がDouble はすべての整数値を正確に表しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。