c ++ pow функция - неверный результат? - PullRequest
2 голосов
/ 05 ноября 2010

Почему выходные данные dResult недействительны?
Env: Visual Studio 2008

int _tmain(int argc, _TCHAR* argv[])  
{  
   double dN = - 0.091023604111478473 ;  
   double dD = 0.127777777777777;  
   double dResult =  pow( dN,dD );   
   //dResult = -1.#IND000000000000  
   return 0;  
}   

Ответы [ 4 ]

8 голосов
/ 05 ноября 2010

См. http://www.cplusplus.com/reference/clibrary/cmath/pow/

double pow (double base, double exponent );

"Если основание является отрицательным, а показатель степени не является целочисленным, или если основание равно нулю, а показатель степени отрицателен, возникает ошибка домена, в которой для глобальной переменной errno установлено значение EDOM."

3 голосов
/ 05 ноября 2010

Это ожидаемый результат, потому что dN отрицательный. Результат pow (dN, dD); определяется только, если dN является положительным или если dD является целым числом. В противном случае результатом является комплексное число. Например, pow (-1., 0.5) тоже не будет работать.

3 голосов
/ 05 ноября 2010

Если ваше значение dD было равно .25 вместо дроби, которую вы представили, вы могли бы видеть, что она действительно берет четвертый корень вместо экспоненты от отрицательного числа. Ваша фракция близка к восьмому корню. Вам нужны комплексные числа, чтобы выразить ответ, который должна дать функция.

0 голосов
/ 05 ноября 2010

Ну, 0.127777777 это какой номер? его smt как 1277777777 / (10 .... 0)

1277777777777 не является четным числом, поэтому -mt в степени 12777777777 является отрицательным числом, а 10 ... 0-й корень из этого числа не является действительным числом.

Я ссылаюсь на факт, что a ^ (b / c) = (c-й корень из) (a ^ b)

...