학위와 관련된 트릭이 있는 이유는 무엇입니까?

 

나는 능력으로 작동하는 함수를 작성해야했고 작성하는 과정에서 나 자신에게 흥미로운 것을 발견했습니다. 즉:

음의 분수를 음의 분수 거듭제곱으로 바꾸면 MQL5는 -nan을 씁니다.

 double n = MathPow (- 5.5 ,- 0.2 );

나는 같은 결과를 얻은 C ++에서 체크인했습니다 (컴파일하기에 너무 게으르고 cpp.sh에서 빠르게 테스트했기 때문에 어떤 버전의 언어가 사용되었는지 모르겠습니다)

 #include <iostream>
#include < string >
#include <tgmath.h>

int main()
{
     double _pow = pow (- 5.5 ,- 0.2 );    
  
  std::cout << _pow << "\n" ;
}


한 번 그리고 플러스로 동일한 대답을 제공하면 MQL5에는 확실히 오류가 없습니다! 그러나 문제는 왜 이런 일이 발생합니까? 수학으로 넘어가면 답이 나와야 합니다. 수학적으로, 음의 거듭제곱에 대한 숫자는 1을 양의 거듭제곱에 같은 숫자로 나눈 것과 같습니다. 다시 말해:

- 5.5 ^- 0.2 = 1 /(- 5.5 ^ 0.2) = − 0 , 711094733 ;

컴퓨터의 계산기가 이를 확인합니다. 학위가 있는 이 트릭은 정확히 무엇입니까?

 
double n = -1/MathPow(5.5, 0.2);
Print(n);
 
Andrey Azatskiy :

나는 능력으로 작동하는 함수를 작성해야했고 작성하는 과정에서 나 자신에게 흥미로운 것을 발견했습니다. 즉:

음의 분수를 음의 분수 거듭제곱으로 바꾸면 MQL5는 -nan을 씁니다.

나는 같은 결과를 얻은 C ++에서 체크인했습니다 (컴파일하기에 너무 게으르고 cpp.sh에서 빠르게 테스트했기 때문에 어떤 버전의 언어가 사용되었는지 모르겠습니다)


한 번 플러스에서 동일한 대답을 제공하면 MQL5에는 확실히 오류가 없습니다! 그러나 문제는 왜 이런 일이 발생합니까? 수학으로 넘어가면 답이 나와야 합니다. 수학적으로 음의 거듭제곱에 대한 숫자는 1을 양의 거듭제곱으로 나눈 값과 같습니다. 다시 말해:

컴퓨터의 계산기가 이를 확인합니다. 학위가 있는 이 트릭은 정확히 무엇입니까?

R에서:

(-5.5)^-0.2=NaN

-5.5^-0.2=-(5.5^-0.2)=-0.7110947

 
Aleksey Nikolayev :

R에서:

(-5.5)^-0.2=NaN

-5.5^-0.2=-(5.5^-0.2)=-0.7110947

아마도 음수에서 짝수 뿌리를 뽑는 것이 불가능하다는 사실에서 다리가 자랄 것입니까? 나는 이미 다소 혼란 스럽습니다 ... 그리고 가장 중요한 것은이 문제를 해결하는 방법은 무엇입니까?

 
Andrey Azatskiy :

그리고 가장 중요한 것은 이 문제를 해결하는 방법은 무엇입니까?

m = 2

n = 10

 double result = pow ( pow (- 5.5 , 2.0 ),- 0.1 ); 
Print ( "result = " ,result);                       //result = 0.7110947333604484
대괄호가 없으면 빼기 기호가 다르게 해석될 수 있습니다. IMHO
 
Roman :

표지판에 문제가 있을 것입니다. 짝수 거듭제곱의 뿌리는 항상 양수입니다.

 
Andrey Azatskiy :

표지판에 문제가 있을 것입니다. 짝수 거듭제곱의 뿌리는 항상 양수입니다.

도가 분수인 계산기에서

 1 /(- 5.5 ^ - 0.2 )
- 0 , 7110947333604484236326007791589

도가 소수인 mql에서

 double n = 1 / MathPow (- 5.5 , - 0.2 );
Print (n);

zero divide in 'Pow.mq5' 

mql에서 학위가 정수인 경우

 double n = 1 / MathPow (- 3.0 , - 3.0 );
Print (n);

- 27.0

결론적으로, 이 함수는 분수 거듭제곱을 올바르게 계산하지 않고 0 나누기를 반환합니다.

 
Igor Makanu :

m = 2

n=10

대괄호가 없으면 빼기 기호가 다르게 해석될 수 있습니다. IMHO

답변 감사합니다만, 일반적으로 산술적으로 정확한 해를 구하면 복소수만으로도 비슷한 것을 구현할 수 있을 것 같습니다... 제안하신 방법에서 차수를 나누어서 루트 값은 항상 양수이고 답은 항상 양수입니다. 그러나 이 피팅 없이 취하면 일반적으로 받아 들여지는 대수 모델에 따르면 내가 아는 한 (나는 교육을 받은 수학자가 아닙니다) - 음수의 근은 다음과 같을 것입니다. 복소수.

 
Roman :

도가 분수인 계산기에서

도가 소수인 mql에서

mql에서 학위가 정수인 경우

결론적으로, 이 함수는 분수 거듭제곱을 올바르게 계산하지 않고 0 나누기를 반환합니다.

기능이 맞습니다. 표준 수학에서는 작동하지 않습니다.

 
내가 잘못 이해했다면 수정하십시오. 아마도 복소수 외부에 솔루션이 여전히있을 수 있습니까?
 
Andrey Azatskiy :

기능이 맞습니다. 표준 수학에서는 작동하지 않습니다.

-0.2는 0으로 나누기 오류를 반환하는 0이 아닙니다.