1. ホーム
  2. c++

整数浮動小数点数の割り算は1.fになることが保証されているのですか?

2023-10-12 09:32:31

質問

と書くと

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

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

どのように解決するのですか?

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

だけ の例外は y / y でなく、一般に 1.f の場合は yNaN , +Inf , -Inf , 0.f そして -0.f があるプラットフォームで、または int が非常に広いため、特定のインスタンスを float で表現することはできません。 float に設定されています。 +Inf または -Inf 1 . 最後のポイントはさておき、あなたの場合、それはつまり int x = 0; が唯一の例外を生成することを意味します。

IEEE754は極めて一般的です。しかし、確実に確認するために、値をテストして

std::numeric_limits<float>::is_iec559;


1 プラットフォームは、たとえば、128 ビットの int と IEEE754 の 32 ビット float の特定の値でこの挙動を示すでしょう。 x .