Rounding on PowerPC with KIND=16
Jerry DeLisle
jvdelisle@charter.net
Fri Feb 13 21:44:00 GMT 2015
On 02/13/2015 01:11 PM, Jerry DeLisle wrote:
> If you run this program on x86-64 vs Power PC, the Power PC appears to have an
> off by one spacing. I assume this means the least significant bit is off or we
> are converting wrong when we write it. I suspect this is a known issue, but was
> wondering if anyone has explored it? Could it have something to do with endianess?
>
> Jerry
>
> program testit
> use ISO_FORTRAN_ENV
> implicit none
> integer, parameter :: np = 16
> character(50) :: astring
> integer :: i, l, n
> real(kind=np) :: r, s, t, u
>
> r = 1.0_np
> s = 10.0_np
> t = r/s
> u = (t + spacing(t)) * s
>
> print "(g0)", r
> print "(g0)", s
> print "(g0)", t
> print "(g0)", u
> print "(g0)", t + spacing(t)
> print "(g0)", t - spacing(t)
> write(astring, "(g0)"), t
> print *, len(trim(astring)), " ", trim(astring)
>
> end program
>
Sample Output
x86-64:
1.00000000000000000000000000000000000
10.0000000000000000000000000000000000
.100000000000000000000000000000000005
1.00000000000000000000000000000000019
.100000000000000000000000000000000017
.999999999999999999999999999999999928E-0001
37 .100000000000000000000000000000000005
PowerPC
1.00000000000000000000000000000000000
10.0000000000000000000000000000000000
.999999999999999999999999999999996919E-0001
1.00000000000000000000000000000000000
.100000000000000000000000000000001233
.999999999999999999999999999999981511E-0001
43 .999999999999999999999999999999996919E-0001
More information about the Fortran
mailing list