Formally, the behavior is undefined. On a machine with IEEE
floating point, however, overflow after rounding will result
in Inf
. The precision is limited, however, and the results
after rounding of FLT_MAX + 1
are FLT_MAX
.
You can see the same effect with values well under FLT_MAX
.
Try something like:
float f1 = 1e20; // less than FLT_MAX
float f2 = f1 + 1.0;
if ( f1 == f2 ) ...
The if
will evaluate to true
, at least with IEEE arithmetic.
(There do exist, or at least have existed, machines where
float
has enough precision for the if
to evaluate to
false
, but they aren't very common today.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…