setprecision - float c++ ejemplos
¿Se garantiza que un número entero flotante dividido por sí mismo sea 1.f? (2)
Si escribo
int x = /* any non-zero integer value */;
float y = x;
float z = y / y;
¿Se garantiza que
z
es exactamente 1.f?
No, no en todos los casos, incluso para IEEE754.
Por ejemplo, con
int x = 0;
, obtendrás NaN.
(
Live
)
Si su implementación de C ++ usa IEEE754, entonces sí, esto está garantizado. (El operador de división debe devolver el mejor valor de punto flotante posible).
Las
únicas
excepciones para
y / y
, en general, no son
1f
son los casos en que
y
es
NaN
,
+Inf
,
-Inf
,
0f
y
-0f
, o si está en una plataforma donde
int
es tan amplio que ciertas instancias de no se puede representar en un
float
sin que ese
float
se establezca en
+Inf
o
-Inf
1
.
Dejando a un lado ese punto final, en su caso eso significa que
int x = 0;
producirá la única excepción.
IEEE754 es extremadamente común. Pero para asegurarse, pruebe el valor de
std::numeric_limits<float>::is_iec559;
1
Una plataforma, por ejemplo, con un
int
128 bits y un flotante IEEE754 de 32 bits exhibiría este comportamiento para ciertos valores de
x
.