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)
的数字做什么,那么其他人可能会有其他想法来解决您的问题。
如果我这样做 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)
的数字做什么,那么其他人可能会有其他想法来解决您的问题。