Linux 添加STOP语句会更改输出值
为(双精度)变量获得的值作为Fortran程序的一部分写入屏幕。在Linux 添加STOP语句会更改输出值,linux,fortran,fedora,Linux,Fortran,Fedora,为(双精度)变量获得的值作为Fortran程序的一部分写入屏幕。在write语句之后,程序将不间断地继续运行 但是,当我在写入后立即添加一个stop语句时,我会得到一个不同的(屏幕打印的)变量值。值的变化从第6位有效数字开始 该守则包括: enertot=energy0(x,y,z,size) !energy0 is a function write (*,*) 'The initial energy is', enertot 这会在屏幕上为enertot输出一些(合理的)值,然后程序继续运行
write
语句之后,程序将不间断地继续运行
但是,当我在写入后立即添加一个stop
语句时,我会得到一个不同的(屏幕打印的)变量值。值的变化从第6位有效数字开始
该守则包括:
enertot=energy0(x,y,z,size) !energy0 is a function
write (*,*) 'The initial energy is', enertot
这会在屏幕上为enertot
输出一些(合理的)值,然后程序继续运行
现在添加停止
:
enertot=energy0(x,y,z,size) !energy0 is a function
write (*,*) 'The initial energy is', enertot
stop
这为enertot
提供了一个不同的值
无论我使用哪种编译器(f90/95编译器),都会出现同样的问题。这可能与这台机器非常陈旧,运行在过时的Linux Fedora操作系统上有关吗
更奇怪的是,当我使用Silverfrost编译器在我的Windows笔记本电脑上运行完全相同的程序时,我总共得到了enertot
的第三个结果,与之前从第五个有效数字开始的结果不同。但是,在这种情况下,添加停止
根本不会改变打印值
有什么想法吗?你能重新格式化源代码吗?确切的Fortran版本是什么?(Fedora有多老?)添加write语句可以禁用某些编译器优化,因此可以观察不同的结果。记住,你在做浮点算术,永远不要相信所有的数字都是精确的。制作一个最小的代码,可以重现这个问题。