[Bug fortran/55539] [4.8 Regression] -fno-sign-zero may generate output with the wrong sign
jb at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Dec 15 16:48:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55539
--- Comment #6 from Janne Blomqvist <jb at gcc dot gnu.org> 2012-12-15 16:47:44 UTC ---
(In reply to comment #4)
> (In reply to comment #3)
> > Strangely enough I needed to add some epsilon to 0.5 so that
> > the second test passes, because the exact value 0.5 appears
> > to get rounded down to 0 in formatted output.
>
> That should depend on the rounding mode; you have the choice between
> RD (round down), RC (compatible), RN (nearest), RP (processor dependent), RU
> (round up), RZ (round towards zero).
>
> The default ("RD") in gfortran is NEAREST, which has to match IEEE 754-1985
> (alias IEC 60559:1989), namely (cf. Note 10.14 in Fortran 2008):
Actually, for processor dependent or unspecified (default) rounding,
libgfortran does not do any rounding itself, but rather uses the snprintf()
generated digits directly; A large part of the r185433 patch was figuring out
the correct number of digits so that we could skip the libgfortran rounding
step.
That being said, a snprintf() which claims conformance to IEEE 754 should by
default provide round to nearest, ties to even rounding behavior.
> "On processors that support IEEE rounding on conversions, the I/O rounding
> modes COMPATIBLE and NEAREST will produce the same results except when the
> datum is halfway between the two representable values. In that case, NEAREST
> will pick the even value, but COMPATIBLE will pick the value away from zero.
> The I/O rounding modes UP, DOWN, and ZERO have the same e
ect as those speci
ed
> in IEC 60559:1989 for round toward +oo, round toward -oo, and round toward 0,
> respectively."
>
> And 0.5 rounded to even rounds down to "0" and not up to "1". (Seemingly,
> decimal "0.5" is exactly representable in binary FP while decimal "0.1" isn't.)
More information about the Gcc-bugs
mailing list