sinh() 在 R 中返回 inf

sinh() returning inf in R

如果我这样做 sinh(1000) 我会得到 Inf,这似乎是预期的,但我很想知道是否有任何方法可以克服这个问题?

我试过:format(round(sinh(1000), 2), nsmall = 2) 认为这是一个小数问题,但也许我的问题更概念化,而不是技术性的?

我只是觉得很奇怪,sinh(700) 效果很好,但在足够接近这个

的数字上却失败了

参见 this 回答。 numeric R 中的对象只能变得这么大。对于大 x:

,逆 sinh 大约是 log(x) + log(2)
> .Machine$double.xmax
[1] 1.797693e+308
> sinh(log(.Machine$double.xmax) + log(2))
[1] 1.797693e+308
> sinh(log(.Machine$double.xmax) + log(2) + 1e-10)
[1] Inf

一种常见的方法是在 log-space 中工作。 log(sinh(x)) 对于大 x 大约是 x - log(2):

> log(sinh(700))
[1] 699.3069
> 700 - log(2)
[1] 699.3069
> log(sinh(700)) - 700 + log(2)
[1] 5.495604e-14

如果您阐明了您尝试使用大于 sinh(700) 的数字做什么,那么其他人可能会有其他想法来解决您的问题。