2012-05-21 5 views
3

누군가 내가 왜 첫 번째 경우에는 양수 결과를, 두 번째 경우에는 음수가되는지 설명 할 수 있습니까?부정적인 실수의 지수화

auto r1 = -3.0L; 
auto r2 = 2.0L; 
writeln(typeid(r1)); // real 
writeln(typeid(r2)); // real 
writeln(typeid(r1 ^^ r2)); // real 
writeln(r1 ^^ r2); // 9 

writeln(typeid(-3.0L)); // real 
writeln(typeid(2.0L)); // real 
writeln(typeid(-3.0L ^^ 2.0L)); // real 
writeln(-3.0L ^^ 2.0L); // -9 
+2

,하지만 난 부정적인 지수 이후에 추가 생각 :

이 규칙은 심지어 수학 표현식에서 동일합니다. 괄호 안에 -3.0L을 넣으십시오. –

+0

@Cole 연산자 우선 순위 문제입니까? 팸알을 추가하는 것은 효과가 있습니다. 내가 말했듯이 – fwend

+0

. Idk. 나는 진전이 없다. –

답변

5

면책 조항 : 알 수 없음 D. 다른 언어로 된 제 배경으로 작성되었습니다.

네거티브 (실제) 숫자를 제곱하면 숫자는 양수가됩니다.

-3^2 

중 하나를 의미 할 수있는 :

  • -(3^2) = -9 또는 출력으로 판단
  • (-3)^2 = 9

, 나는 가정 당신은 (인간) 모호한 표현을 쓰고있다 프로그래밍 언어의 연산자 우선 순위가 가장 먼저 선택됩니다. 마지막 행을 다음으로 바꿔보십시오.

writeln((-3.0L) ^^ 2.0L); // -9 
+2

실제로는 모호하지 않습니다. 수학 및 프로그래밍 언어 모두에서 명확하게 정의됩니다. – Joey

+2

@Joey 모든 연산자를 표현식에 결합 할 때 모든 연산자가 그렇듯이 연산자 우선 순위가 없어도 모호합니다. 자연히 연산자 우선 순위가 있습니다. 표현식을 컴파일러에게 모호하지 않게합니다. 그러나 프로그래머가 관련된 연산자의 우선 순위를 모르는 경우 명확하게 혼동을 줄 수 있습니다. –

2

위의 소스에는 아무런 문제가 없습니다. 좋은 FORTRAN은 우선 순위가 가장 높은 전력 연산자를 가지고 있습니다 (예를 들어 http://h21007.www2.hp.com/portal/download/files/unprot/fortran/docs/lrm/lrm0067.htm 참조). 따라서 거의 모든 현대 프로그래밍 언어에서 전력 연산자 인 표현식 -3^2-(3^2)으로 평가됩니다. 내가 어떤 전문가는 아니지만 http://en.wikipedia.org/wiki/Order_of_operations#Exceptions_to_the_standard