在compaq fortran 6.5中用parameter怎么有点问题?

来源:百度知道 编辑:UC知道 时间:2024/06/17 17:50:12
我在compaq 6.5 中用parameter(dx=0.01d0)后,写了如下循环:
do i=1,100
x(i)=(i-1)*dx
write(*,*)x(i)
end do
但是输出的x(i)的值在后面就不大对了,比如x(100)并非0.99000000000
而是0.990000000128之类的。
那位可以告诉我这是怎么回事,本人谢谢!
当不用parameter(dx=0.01d0)但是写dx=0.01d0时输出非常正常!
据我所知,parameter参数在程序执行时是不写入内存的,而是在编译时写入程序的。所以我对前面的回答不是非常满意。

正常,因为小数在内存中是有精度限制的,所以出现这种情况,你可以只取小数点后几位,其它的不管就行。

回答补充:
如果用parameter的结果和直接用变量赋值的结果不一样说明编译器编译时对parameter的处理方式和对变量的处理方式可能不一样。
我试验了你的程序(compaq fortran 6.6),结果如下:
1、real*8,parameter::dx=0.01d0;
2、real*8::dx=0.01d0;
这两种方式输出结果相同,如下
0.0000000E+00
9.9999998E-03
2.0000000E-02
2.9999999E-02
3.9999999E-02
5.0000001E-02
5.9999999E-02
7.0000000E-02
7.9999998E-02
9.0000004E-02
0.1000000
0.1100000
...中间略
0.9900000
3、real*4,parameter::dx=0.01;
4、real*4,parameter::dx=0.01d0;
5、real*4::dx=0.01d0;
6、real*4::dx=0.01;
这4中输出结果相同,如下
0.0000000E+00
9.9999998E-03
2.0000000E-02
2.9999999E-02
3.9999999E-02
4.9999997E-02
5.9999999E-02
7.0000000E-02
7.9999998E-02
8.9999996E-02
9.9999994E-02
0.1100000
0.1200000
...
0.9899999
根据我的结果,用parameter和变量的方式结果