This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libfortran/35862] [F2003] Implement new rounding modes for run time
- From: "burnus at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Oct 2009 07:35:38 -0000
- Subject: [Bug libfortran/35862] [F2003] Implement new rounding modes for run time
- References: <bug-35862-10743@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #10 from burnus at gcc dot gnu dot org 2009-10-01 07:35 -------
(In reply to comment #9)
> Rounding modes are now implemented for formatted WRITE operations. I do not
> have a clear enough idea of what the rounding modes really mean for READ
> operations. For example:
>
> "Rounding is done for all I/O, including input. For example, if you have:
> read ("0.1", *, rounding="up") x
> read ("0.1", *, rounding="down") y
> then you will have x == nearest(y, -1.)"
For REAL(8) I would expect for 0.1_8 with rounding up and down:
0.10000000000000001
9.99999999999999917E-002
or written as binary:
11111110111001100110011001100110011001100110011001100110011010 (= 0.1 rnd up)
11111110111001100110011001100110011001100110011001100110011001 (= 0.1 rnd down)
> Is this really what is meant by rounding up or down?
I think so.
> The internal representation of .1 may already be rounded up or down
> from a binary representation that carried more bits in the conversion
> process. If we do not have access to more bits, how are we to know
> whether it is not already "half way in between"
Well, the rounding has to be based on the string (= decimal) number; if you
already have a binary number, it is too late.
> Similarly with nearest.
Using "nearest" with "-1." in this example only works if you know that "read"
automatically rounds up for 0.1.
* * *
Handling this efficiently and reliably is presumably nontrivial.
See for instance:
http://netlib.org/fp/ (esp. http://netlib.org/fp/gdtoa.tgz)
http://dx.doi.org/10.1145/989393.989430
http://www.informatik.uni-trier.de/Reports/TR-08-2004/rnc6_10_hack.pdf
and references therein.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35862