[Bug fortran/65757] New: gfortran gives incorrect result for anint with real*16 argument

2015-04-13 Thread bugs at dhbailey dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65757

Bug ID: 65757
   Summary: gfortran gives incorrect result for anint with real*16
argument
   Product: gcc
   Version: 4.9.0
Status: UNCONFIRMED
  Severity: major
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: bugs at dhbailey dot com

gfortran gives an incorrect result for the anint (nearest whole number)
function for certain real*16 arguments.  Here is a simple example:

program anintbug
implicit none
real (kind (0.q0)) q1, q2, q3

q1 = 233181505644407.694824218750q0
q2 = anint (q1)
q3 = 233181505644408.q0

write (6, '(f50.25)') q1, q2, q3
write (6, '(z35)') q1, q2, q3
stop
end

When compiled with "gfortran anintbug.f90", this program produces the following
output.  The second result should equal the third result, but does not.

 233181505644407.6948242187500
 233181505644407.6948242187500
 233181505644408.0
   402EA827999FCEEC
   402EA827999FCEEC
   402EA827999FCEF0


[Bug libquadmath/65757] gfortran gives incorrect result for anint with real*16 argument

2015-04-22 Thread bugs at dhbailey dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65757

--- Comment #3 from dhbbugs  ---
Has anyone else been able to confirm that Steve Kargl's fix will work?  What
has to happen to move this fix into the production code?


[Bug libquadmath/65757] gfortran gives incorrect result for anint with real*16 argument

2015-04-23 Thread bugs at dhbailey dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65757

--- Comment #8 from dhbbugs  ---
Jerry DeLisl'e output is certainly not correct -- anint should invariably
return the nearest whole number.  It should be the equivalent of this code:

if (x >= 0.0) then
  anint = aint (x + 0.5)
else
  anint = aint (x - 0.5)
endif

Here aint is the truncated whole number function (a Fortran intrinsic).