Вопрос

Почему вывод 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;  
}   
Это было полезно?

Решение

Видеть http://www.cplusplus.com/reference/Clibrary/cmath/pow/

double pow (double base, double exponent );

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

Другие советы

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

Это ожидаемый результат, потому что DN отрицательный. Результат POW (DN, DD); определяется только в том случае, если либо DN является положительным, либо если DD является целым числом. В противном случае результат является сложным числом. Например, POW (-1., 0,5) тоже не будет работать.

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

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

Я готовлюсь к тому факту, что ^ (b / c) = (c-th root) (a ^ b)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top