2014-01-16 7 views
0

Fortran에는 표현식 평가 순서에 엄격한 규칙이 있습니다. 일부 수치 알고리즘의 경우 이것은 매우 중요합니다.C 코드의 연산 순서 제어

숫자 C 프로그램은 부동 소수점 연산의 순서를 제어하고 컴파일러가 (a*b)*c에서 a*(b*c)으로 변경하는 등 바람직하지 않은 연산 순서를 "최적화"하지 못하게합니다.

+0

표준은 컴파일러가 부동 소수점 연산의 순서를 바꾸지 못하도록하기 때문에 프로그램의 동작을 변경할 수 있기 때문에 부동 소수점 연산의 순서를 바꾸지 못하게해야합니다. 그러나 손에 표준이있는 사람이 필요합니다. – luk32

+0

그리고 내가 올바르게 이해한다면 이것은 포트란에서도 마찬가지입니다 : http://stackoverflow.com/questions/13135262/consistent-floating-point-arithmetic-in-fortran-with-different-compilers-on-diff; 그 엄격한 규칙에 대한 진술을 어디에서 읽었습니까? –

+2

[표준 규칙] (http://en.cppreference.com/w/c/language/operator_precedence)에 만족하지 않으면 괄호 안에 특정 표현식을 넣으십시오. 그러나 일반적으로 컴파일러는 하위 표현식에 부작용이 없다고 100 % 말할 수있는 경우에만 순서를 다시 지정합니다. –

답변

0

괄호를 사용하면 실행 순서가 보장됩니다.

0

나는 바람직하지 않은 결과를 초래할 수 있으므로 코드를 최적화하지 않는다고 생각합니다. 일반적으로 숫자 식 중첩 표기법을 사용하고 다른 연산자의 우선 순위에 따라 스택 연산을 적용하여 접미사로 변환합니다.
이 코드는 코드를 최적화하는 데 사용되지만 모든 괄호를 생략하고 우선 순위에 따라 간단하게 코드의 가독성을 높일 수 있습니다.
. priority order