2014 dxdy logo

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

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




 
 Вычисление гиперболических функций
Сообщение02.11.2019, 23:18 
Аватара пользователя
Добрый день!
Подскажите, пожалуйста, где можно найти алгоритмы точного и эффективного вычисления прямых и обратных гиперболических функций (для $\cosh$, по всей видимости, также понадобится $\operatorname{coshm1}(x)=\cosh(x)-1$ и $\operatorname{acosh1p}(x)=\operatorname{acosh}(1+x)$, а для $\tanh$ - $\operatorname{tanhc}(x)=1-\tanh(x)$ (но с этим, кажется, всё просто)).
В распоряжении имеются "обычные" четыре действия, квадратный корень, экспонента, логарифм, а также $\operatorname{expm1}(x)=\exp(x)-1$ и $\operatorname{log1p}(x)=\log(1+x)$.
Под "точностью" понимается работа в формате double ($2^{1024}=\inf$, $1+2^{-53}=1$ и т.п.).
Под "эффективностью" - скорость вычисления (экспонента/логарифм/корень примерно в 10 раз дольше умножения/сложения/проверки условий).

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 00:00 
Аватара пользователя
Geen в сообщении #1423662 писал(а):
В распоряжении имеются "обычные" четыре действия, квадратный корень, экспонента, логарифм
Что-то мешает воспользоваться определением $\operatorname{ch} x = (e^x  + e^{ - x} )/2$ и т.п. ?

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 00:03 
Как понимаю, ситуация такая, что обычные $\operatorname{cosh} x = 0{,}5\cdot(\exp x + \exp(-x))$ или $\operatorname{coshm1} x = 0{,}5 (\operatorname{expm1} x + \operatorname{expm1}(-x))$ недостаточно эффективны (согласен, две экспоненты хуже, чем одна) или точны. (Так?) И под точностью всё-таки имеется в виду близость результата к самому точному представлению настоящего ответа? (Понятно, что при сложении двух экспонент она будет хуже, чем у одинарной экспоненты, но важно ли это небольшое отличие для интересующих вас приложений?)

А вот $\mathrm{acosh1p}$ и вообще обратные функции — это да, тут лучше всё-таки свериться с книгой численных рецептов и не пытаться выдумывать. Попытался найти у себя подобную книгу и не нашёл, так что ничего не посоветую, а присоединюсь к вопросу.

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 00:08 
Аватара пользователя
arseniiv в сообщении #1423670 писал(а):
И под точностью всё-таки имеется в виду близость результата к самому точному представлению настоящего ответа?

Да, очень желательно бы.

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 00:12 
А их обязательно реализовывать вручную? Просто надо еще поискать ситуацию, чтобы и встроенные отсутствовали, и библиотек не было...

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 00:13 
Аватара пользователя
Утундрий в сообщении #1423667 писал(а):
Что-то мешает воспользоваться определением $\operatorname{ch} x = (e^x  + e^{ - x} )/2$ и т.п. ?

Да - $2^{-1022}$ (и даже меньше) не равны нулю, а $1\pm2^{-53}=1$ "тождественно".

-- 03.11.2019, 00:14 --

Pphantom в сообщении #1423673 писал(а):
Просто надо еще поискать ситуацию, чтобы и встроенные отсутствовали, и библиотек не было...

IE11... :-)

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 00:46 

(Оффтоп)

Geen в сообщении #1423675 писал(а):
IE11...
Да, месье знает толк в извращениях...

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 01:07 
А, мне тут сказали, что моё определение coshm1 страдает от сокращения всё равно и тогда exp1m(0.5 * log1p(sinh(x) ** 2)) может быть лучше. Это пока нет ссылок на что-то более приятное полнотой.

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 01:13 
Аватара пользователя
Pphantom в сообщении #1423677 писал(а):

(Оффтоп)

Geen в сообщении #1423675 писал(а):
IE11...
Да, месье знает толк в извращениях...

Ну так случилось - я бы взял "полифил" и не морочился бы... но, суммирование трёхсот членов $\operatorname{log1p}$ для всех $x<1$ меня подкосило... :mrgreen:

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 01:38 
Geen
Ещё может пригодиться: вот код из библиотеки для джавы, по этой ссылке как раз coshm1, но там есть и другие вещи:
https://github.com/jeffhain/jafama/blob/master/src/main/java/net/jafama/StrictFastMath.java#L709
Понятно, ничего джавоспецифического там нет (по крайней мере в тех функциях, которые я пробежал).

 
 
 
 Re: Вычисление гиперболических функций
Сообщение03.11.2019, 01:59 
Аватара пользователя
arseniiv в сообщении #1423681 писал(а):
Ещё может пригодиться: вот код из библиотеки для джавы, по этой ссылке как раз coshm1,

Ага, спасибо, завтра попробую проверить.

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


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