移植一些Fortran 77代码.似乎REAL变量被分配给INTEGER变量.我没有运行此代码的方法,并想知道在以下情况下的行为是什么:
REAL*4 A
A = 123.25
B = INT(A)
Run Code Online (Sandbox Code Playgroud)
B = 123或B = 124?
在0.5分处怎么样?
REAL*4 C
C = 123.5
D = INT(C)
Run Code Online (Sandbox Code Playgroud)
D = 123或D = 123.5?
这是代码和输出的一个示例,它是先前答案的扩展:
PROGRAM test
implicit none
integer :: i=0
real :: dummy = 0.
do i = 0,30
dummy = -1.0 + (i*0.1)
write(*,*) i, dummy , int(dummy) , nint(dummy) ,floor(dummy)
enddo
stop
end PROGRAM test
Run Code Online (Sandbox Code Playgroud)
这是输出:
$ ./test
0 -1.000000 -1 -1 -1
1 -0.9000000 0 -1 -1
2 -0.8000000 0 -1 -1
3 -0.7000000 0 -1 -1
4 -0.6000000 0 -1 -1
5 -0.5000000 0 -1 -1
6 -0.4000000 0 0 -1
7 -0.3000000 0 0 -1
8 -0.2000000 0 0 -1
9 -9.9999964E-02 0 0 -1
10 0.0000000E+00 0 0 0
11 0.1000000 0 0 0
12 0.2000000 0 0 0
13 0.3000001 0 0 0
14 0.4000000 0 0 0
15 0.5000000 0 1 0
16 0.6000000 0 1 0
17 0.7000000 0 1 0
18 0.8000001 0 1 0
19 0.9000000 0 1 0
20 1.000000 1 1 1
21 1.100000 1 1 1
22 1.200000 1 1 1
23 1.300000 1 1 1
24 1.400000 1 1 1
25 1.500000 1 2 1
26 1.600000 1 2 1
27 1.700000 1 2 1
28 1.800000 1 2 1
29 1.900000 1 2 1
30 2.000000 2 2 2
Run Code Online (Sandbox Code Playgroud)
我希望这可以更好地阐明问题
编辑:在xeon上与ifort 2013一起编译