Вычисление x^alpha при малых x

gabuga

В программе нужно вычислять x^alpha, x - мало, alpha — действительное, положительное. Использую в С функцию pow. Получаю floating point invalid operation. Какие еще есть методы вычисления степени?

vovatroff

) использовать двойную или четверную точность?
Я не знаю, есть ли переменные и встроенные функции
таких типов в С, но в фортране есть.
2) если не помогает, то прологарифмировать, умножить на альфу,
потом возвести в экспоненту?

gabuga

функция pow так и делает. Проблемы с логарифмированием малого x. Все-таки ln(+0)=-\infty

vovatroff

Если х реально настолько мал, то,
боюсь, ухищрения тогда не помогут.
Все равно ответ будет с большой ошибкой.
Так что только за счет разрядной сетки можно
решить проблему, по-видимому.

Zoltan

мало - это сколько?
и какие типы используешь?

Sanych

А нужна экспоненциальная десятичная запись ответа? Если да, то находишь десятичный логарифм искомого числа, потом разделяешь этот логарифм на дробную и целую часть.
PS. Просто на всякий случай: а малое число x точно положительное?

ArmMac

В принципе сколь угодно мало. На самом деле функция |x|^(alpha-1)*x, x переходит через 0. Использую тип double

Zoltan

попробуй использовать long double и отделиться от нуля чем-нибудь маленьким, машинной точностью, например

stm7543347

Альфа насколько положительное?

gabuga

альфа весьма положительно (от 0,5 до 2)
2 примерно так и сделал, вроде работает. Спасибо
Оставить комментарий
Имя или ник:
Комментарий: