Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 添加STOP语句会更改输出值_Linux_Fortran_Fedora - Fatal编程技术网

Linux 添加STOP语句会更改输出值

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输出一些(合理的)值,然后程序继续运行

为(双精度)变量获得的值作为Fortran程序的一部分写入屏幕。在
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语句可以禁用某些编译器优化,因此可以观察不同的结果。记住,你在做浮点算术,永远不要相信所有的数字都是精确的。制作一个最小的代码,可以重现这个问题。