2012-10-11 3 views
0

Visual C++ 컴파일러 최적화로 이상한 상황에 직면하고 있습니다.Visual C++, 컴파일러 최적화가없는 숫자 코드가 잘못된 결과를 나타냅니다.

최적화가 On (/ O1,/O2 또는/Ox)으로 컴파일 된 경우 10 개의 정적 라이브러리가 손상되는 비교적 중간 크기의 C++ 코드에서 프로그램을 실행하면 올바른 결과가 산출됩니다.

/Od 함께 사용하면 프로그램이 잘못된 출력을 생성합니다.

나는이 질문이 매우 일반적이라는 것을 알고 있지만, 나는 그 원인이 무엇인지 또는 그것이 연관 될 수 있는지에 대한 어떤 단서를 고맙게 생각합니다.

p.s. 코드는 부동 소수점 연산의 많은 부분을 FEM 수치로 처리합니다. p.s. 코드가 비주얼 스튜디오에 2010

EDIT : 코드 샘플 출력 :

Solver. time: 0.12, iteration: 1 
Solver. 
------------------------------------ 
determining values: 
     dg.   0 
     limit of dg. 0.897278 
     dr.   7675.3 
     limit of dr. 45.3704 
     r.    7675.3 
     limit of r. 453.704 
     dx.   0.122164 
     limit of dx. 8.97278e-005 
------------------------------------ 
:

(잔류) R의 차이 최적화없이

I. 상당

II.

Solver. time: 0.12, iteration: 1 
Solver. 
------------------------------------ 
determining values: 
     dg.   0 
     limit of dg. 0.897278 
     dr.   5894.53 
     limit of dr. 45.3704 
     r.    5894.53 
     limit of r. 453.704 
     dx.   0.122164 
     limit of dx. 8.97278e-005 
------------------------------------ 

추신 : 최적화 나는 코드 자체를 샘플로 제공 할 수 없다. 실제로 코드에서 문제의 형태가 어디에서 유래되었는지는 알려지지 않았다.

+1

결과가 잘못 될 경우 기능을 격리하십시오. 초기화되지 않은 변수를 사용하는지 확인하십시오. – Andrey

+0

일부 코드 또는 예제를 제공 할 수 있다면 아마도 더 많은 답변을 얻을 수있을 것입니다. – dunadar

+0

@Andrey 함수를 분리하려고하는데 수치가있는 것이 항상 쉬운 것은 아닙니다. (나는 여전히 격리 작업을하고있다.) –

답변

관련 문제