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
Debugging 为什么gfortran/gdb在调试和不调试时会产生不同的数值结果?_Debugging_Fortran_Gdb_Gfortran - Fatal编程技术网

Debugging 为什么gfortran/gdb在调试和不调试时会产生不同的数值结果?

Debugging 为什么gfortran/gdb在调试和不调试时会产生不同的数值结果?,debugging,fortran,gdb,gfortran,Debugging,Fortran,Gdb,Gfortran,我正在使用code::Blocks使用gfortran编译一些数字代码。我有两个版本的可执行文件:Debug和Release 调试编译标志:-Jobj\Debug \-Wall-g-c 发布编译标志:-Jobj\Release \-Wall-O2-c gdb调用标志:-nx-fullname-quiet-args 当我正常运行代码时,Release和Debug可执行文件都会产生相同的输出。但是,当我在gdb中运行代码时,输出是不同的。这似乎是由于数值计算在执行过程中产生了不同的结果 例如,在

我正在使用code::Blocks使用gfortran编译一些数字代码。我有两个版本的可执行文件:Debug和Release

  • 调试编译标志:
    -Jobj\Debug \-Wall-g-c
  • 发布编译标志:
    -Jobj\Release \-Wall-O2-c
  • gdb调用标志:
    -nx-fullname-quiet-args
当我正常运行代码时,Release和Debug可执行文件都会产生相同的输出。但是,当我在
gdb
中运行代码时,输出是不同的。这似乎是由于数值计算在执行过程中产生了不同的结果

例如,在gdb中运行时的一次计算结果为7.93941842553643E-06,正常运行时的一次计算结果为1.71006041855278E-03。更奇怪的是,一些非零结果在双精度精度范围内是相同的

使用
gdb
运行时,如何确保输出相同?在使用gdb时,默认情况下是否使用不同类型的数值计算或评估

这似乎是由于数值计算在执行过程中产生了不同的结果

这是极不可能的:GDB不参与程序执行的任何数值计算

更有可能的是,您的程序使用未初始化的内存,而当程序在GDB下运行时,内存恰好具有不同的值


如果您所在的平台受支持,那么您的第一步应该是在该平台下运行程序,并修复发现的所有错误。

您必须删除错误和未定义的行为。哪一个?谁知道没有看到你的代码…我编辑了原始问题,以反映这样一个事实,即我认为我看到的行为是由于使用gdb运行代码时计算数值的方式不同。那么计算看起来如何?你的意思是什么代码会产生不同的答案?这太复杂了,无法发布,但我正在尝试将其缩小到一段较小的代码。根据优化级别的不同,浮点算法可以给出不同的结果。这通常仅限于不安全的优化,但简单的矢量化也会发生同样的情况。最近我自己也在努力解决这个问题,但从未真正取得任何进展。请看这里: