Является ли целое число float, разделенное на себя, гарантировано равным 1.f?
Если я пишу:
int x = /* any non-zero integer value */;
float y = x;
float z = y / y;
Является z гарантией точности 1.f?
Ответ 1
Если ваша реализация на С++ использует IEEE754, тогда да, это гарантировано. (Оператор деления должен возвращать наилучшее возможное значение с плавающей запятой).
Единственными исключениями для y / y, в общем случае, не являющимися 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 и 32-битным IEEE754 float будет демонстрировать это поведение для определенных значений x.