Code :: Blocks를 사용하여 gfortran으로 일부 숫자 코드를 컴파일 중입니다. 실행 파일에는 Debug와 Release라는 두 가지 버전이 있습니다.디버깅 할 때 gfortran/gdb가 다른 숫자 결과를 생성하는 이유는 무엇입니까?
- 디버그 컴파일 플래그 :
-Jobj\Debug\ -Wall -g -c
- 출시 컴파일 플래그 :
-Jobj\Release\ -Wall -O2 -c
- gdb를 invokation 플래그 :
-nx -fullname -quiet -args
내가 일반적으로 코드를 실행 두 릴리스 및 디버그 실행 파일이 동일한 출력을 생성 . 그러나 gdb
에 코드를 실행하면 출력이 달라집니다. 이것은 실행 중 다른 결과를 산출하는 수치 계산으로 인한 것 같습니다.
예를 들어, gdb에서 실행될 때 계산 한 결과는 7.93941842553643E-06이고 정상적으로 실행되면 1.71006041855278E-03이됩니다. 더욱 기이하게도, 0이 아닌 결과 중 일부는 배정도 정확도 내에서 동일합니다.
gdb
을 사용하여 실행했을 때 출력이 동일한 지 어떻게 확인할 수 있습니까? gdb를 사용할 때 다른 유형의 수치 계산 또는 평가가 기본적으로 사용됩니까?
버그와 정의되지 않은 동작을 제거해야합니다. 어느 것? 누가 코드를 보지 않고 누가 알겠습니까? –
원래의 질문을 편집하여 gdb를 사용하여 코드를 실행할 때 숫자 값을 계산하는 방식의 차이로 인해 나타나는 동작이 있다고 생각한다는 사실을 반영합니다. –
그러면 계산은 어떻게 생겼습니까? –