私が書いた場合:
int x = /* any non-zero integer value */;
float y = x;
float z = y / y;
z
は正確に1.fであることが保証されていますか?
C++実装でIEEE754を使用している場合、はい、保証されています。 (可能な限り最良の浮動小数点値を返すには、除算演算子が必要です)。
y / y
のonly例外は、一般に、1f
でないことは、y
がNaN
、+Inf
、-Inf
、0f
、および-0f
、またはint
の幅が広く、特定のインスタンスがあるプラットフォームを使用している場合float
にfloat
を+Inf
または-Inf
に設定せずに表すことはできません1。あなたの場合、その最後の点を別にすれば、int x = 0;
が唯一の例外を生成します。
IEEE754は非常に一般的です。しかし、確実に確認するために、
std::numeric_limits<float>::is_iec559;
1たとえば、128ビットint
およびIEEE754 32ビットfloat
を備えたプラットフォームは、x
の特定の値に対してこの動作を示します。
いいえ、IEEE754でさえ、すべての場合でそうではありません。
たとえば、int x = 0;
、NaNを取得します。 ( ライブ )