web-dev-qa-db-ja.com

整数の浮動小数点数自体が1.fであることが保証されていますか?

私が書いた場合:

int x = /* any non-zero integer value */;
float y = x;
float z = y / y;

zは正確に1.fであることが保証されていますか?

73
j b

C++実装でIEEE754を使用している場合、はい、保証されています。 (可能な限り最良の浮動小数点値を返すには、除算演算子が必要です)。

y / yonly例外は、一般に、1fでないことは、yNaN+Inf-Inf0f、および-0f、またはintの幅が広く、特定のインスタンスがあるプラットフォームを使用している場合floatfloat+Infまたは-Infに設定せずに表すことはできません1。あなたの場合、その最後の点を別にすれば、int x = 0;が唯一の例外を生成します。

IEEE754は非常に一般的です。しかし、確実に確認するために、

std::numeric_limits<float>::is_iec559;

1たとえば、128ビットintおよびIEEE754 32ビットfloatを備えたプラットフォームは、xの特定の値に対してこの動作を示します。

94
Bathsheba

いいえ、IEEE754でさえ、すべての場合でそうではありません。

たとえば、int x = 0;、NaNを取得します。 ( ライブ

33
Baum mit Augen