Получение корня выше 2

Я пытаюсь взять 11-й корень выражения, и я получаю возврат -inf,

std::cout << pow(j,(1.0/11.0)) << std::endl;

где j это просто некоторые log выражение. Я проверил этот номер, чтобы убедиться, что он действителен, и это так. Я думаю, что это способ выражения силы. Есть лучший способ сделать это? Благодарю.

И да, я включил cmath в мою работу.

0

Решение

Я не могу придумать вескую причину для возврата Pow -inf, если ваши входные данные незначительно вменяемые. Однако, если вы передаете отрицательное число, стоит попробовать следующее:

if(j==0) return 0;
if(j<0) return -pow(-j, 1.0/11.0);
return pow(j,1.0/11.0);
1

Другие решения

  1. попробуйте поискать ошибки FPU

    • наиболее распространенным является забытое возвращение float / double в некоторой функции
    • что приводит к проблемам в стеке FPU, который действительно мал.
  2. Также вы можете попробовать добавить это до того, как Pow

    asm { fninit; };
    
    • это сбрасывает FPU, поэтому, если у вас есть проблемы со стеком, это поможет
    • но, конечно, не делайте этого в середине некоторых вычислений FPU
    • это разрушило бы его результат
    • если вы не на платформе x87, то это не поможет
  3. значение j перед сбоем будет хорошим началом для нас.

  4. попробуйте сохранить результат pow в некоторой переменной float / double

    • cout эта переменная не временная куча памяти
    • если он печатает -inf, посмотрите также внутри этой переменной, если он также -inf
    • (может быть что-то не так с кутом, а не пау …)
  5. сверните свой код (выключите все по частям)

    • и посмотреть, если проблемы вдруг нет
    • скрытые утечки памяти и перезапись кода — это зло …

Дайте нам знать, что вы нашли.

1