1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
! { dg-do run }
program foo
use ieee_arithmetic
use iso_fortran_env
implicit none
! This allows us to test REAL128 if it exists, and still compile
! on platforms were it is not present
! https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89639
integer, parameter :: large = merge(real128, real64, real128 > 0)
integer i, p
real x
x = 4
i = 4
p = int(ieee_scalb(real(x, real32), int(i, int8)))
if (p /= 64) stop 1
p = int(ieee_scalb(real(x, real64), int(i, int8)))
if (p /= 64) stop 2
p = int(ieee_scalb(real(x, large), int(i, int8)))
if (p /= 64) stop 3
p = int(ieee_scalb(real(x, real32), int(i, int16)))
if (p /= 64) stop 4
p = int(ieee_scalb(real(x, real64), int(i, int16)))
if (p /= 64) stop 5
p = int(ieee_scalb(real(x, large), int(i, int16)))
if (p /= 64) stop 6
p = int(ieee_scalb(real(x, real32), int(i, int32)))
if (p /= 64) stop 7
p = int(ieee_scalb(real(x, real64), int(i, int32)))
if (p /= 64) stop 8
p = int(ieee_scalb(real(x, large), int(i, int32)))
if (p /= 64) stop 9
p = int(ieee_scalb(real(x, real32), int(i, int64)))
if (p /= 64) stop 10
p = int(ieee_scalb(real(x, real64), int(i, int64)))
if (p /= 64) stop 11
p = int(ieee_scalb(real(x, large), int(i, int64)))
if (p /= 64) stop 12
end program foo
|