| ! { dg-do run } |
| ! |
| ! I/O test for REAL(16) |
| ! |
| ! Contributed by Dominique d'Humieres |
| ! |
| program test_qp |
| use iso_fortran_env, only: real_kinds |
| implicit none |
| integer, parameter :: QP = real_kinds(ubound(real_kinds,dim=1)) |
| real(kind=qp) :: a,b(2), c |
| integer :: exponent, i |
| character(len=180) :: tmp |
| |
| ! Run this only with libquadmath; assume that all those systems |
| ! have also kind=10. |
| if (size (real_kinds) >= 4 .and. qp == 16) then |
| i = 3 |
| if (real_kinds(i) /= 10) stop |
| |
| exponent = 4000 |
| b(:) = huge (1.0_qp)/10.0_qp**exponent |
| ! print *, 'real(16) big value: ', b(1) |
| write (tmp, *) b |
| read (tmp, *) a, c |
| ! print *, 'same value read again: ', a, c |
| ! print *, 'difference: looks OK now ', a-b(1) |
| if (abs (a-b(1))/a > epsilon(0.0_qp) & |
| .or. abs (c-b(1))/c > epsilon (0.0_qp)) call abort() |
| end if |
| end program test_qp |