2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 reciprocal power
Сообщение30.11.2025, 19:04 
Аватара пользователя
Добрый день!
Как корректно (и быстро) вычислять функцию $1-(1-x)^n$ ($0\le x\le1$, $n\ge0$)?
Причём, $x$ может быть очень маленьким, а $n$ достаточно большим.

Понятно, что если $nx$ меньше машинной точности, то его и вернуть...

 
 
 
 Re: reciprocal power
Сообщение30.11.2025, 21:02 
Аватара пользователя
Как-то я пока не вижу ничего лучше
Код:
-expm1(n*log1p(-x))
(если $x\ne1$)

 
 
 
 Re: reciprocal power
Сообщение01.12.2025, 01:37 
Вроде были аналогичные команды 87 сопроцессора, только с двоичными экспонентой и логарифмом.

 
 
 
 Re: reciprocal power
Сообщение01.12.2025, 03:04 
Были, и есть: логарифм fyl2xp1, экспонента f2xm1, умножение fmul, смена знака fchs.
Пример без проверок:
Используется синтаксис ASM
        fld     [x]
        fchs
        fyl2xp1
        fld     [n]
        fmulp
        f2xm1
        fchs
        fstp    [y]
        fwait
        ret
Время выполнения чуть больше 1000 тактов (пара-тройка миллионов раз в секунду, смотря от частоты проца).

 
 
 
 Re: reciprocal power
Сообщение01.12.2025, 10:56 
Аватара пользователя
Спасибо!

 
 
 
 Re: reciprocal power
Сообщение01.12.2025, 11:35 
Если 1000 тактов - то может быть быстрее один раз посчитать какие-нибудь ряды, а не полагаться на микропрограммы. Только придётся тестировать.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group