如果我做sinh(1000)
,我得到Inf
,这似乎是预期的,但我很想知道是否有任何方法来克服这一点?
我试过:format(round(sinh(1000), 2), nsmall = 2)
相信这是一个十进制的问题,但也许我的问题是概念性的,而不是技术?
我只是发现很奇怪,sinh(700)
工作得很好,但在足够接近这个
请看答案。R中的numeric
对象只能变这么大。对于较大的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(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)
的数字,有人可能有额外的想法来解决你的问题。