> pnorm(-37) [1] 5.725571e-300 > pnorm(-37.5) [1] 4.605353e-308
现在当我再减少一点的时候,我得到了
> pnorm(-37.6) [1] 0
有没有可能让R显示一个更小的数字?理想情况下,最好能得到pnorm(-39)甚至pnorm(-125)的数值。
pnorm(-39)
pnorm(-125)
11dmarpk1#
正如注解所指出的,您可以使用log.p=参数将其转换为对数标度。然而,这给了你一个以e为基数的输出,如果你想让它像上面的例子一样以10为基数,你可以得到你想要的输出,像这样:
log.p=
x <- pnorm(-39, log.p = T) x * log10(exp(1)) # -332.2714 x <- pnorm(-125, log.p = T) x * log10(exp(1)) # -3395.422
你可以把它解释为问题中例子的力量。
一些例子显示了这一点:
x <- pnorm(-35, log.p = T) x * log10(exp(1)) # -267.9489 pnorm(-35) # 1.124911e-268 x <- pnorm(-19, log.p = T) x * log10(exp(1)) # -80.06919 pnorm(-19) # 8.527224e-81
下面是一个显示实际数字的示例:
x <- pnorm(-37.5, log.p = T) x * log10(exp(1)) # -307.3367 pnorm(-37.5) # 4.605353e-308 10^-307.3367 # 4.605746e-308
由于四舍五入,这只是稍微偏离(从代码中插入实际数字以获得确切的答案)。当然,对于更大的数字,你必须保持它的指数形式,因为R仍然会给予你0。电话:+86-10 -332.2714如果你想知道如果R不把很小的数字四舍五入到0,它会给予你什么,你可以把指数分开。例如,10^-2 = 10^(-1-1),或者在我们的例子中,10^-2.2 = 10^-(2 + 0.2)。因此,按照以下步骤,我们可以用pnorm()再次检查答案:
pnorm()
x <- pnorm(-35, log.p = T) x * log10(exp(1)) # -267.9489 pnorm(-35) # 1.124911e-268 10^-(267 + .9489) #1.124864e-268 10^-0.9489 * 10^-267 #1.124864e-268 0.1124864 * 10^-267 #1.124864e-268 0.1124864e-267 #1.124864e-268
所以我们来看看一个R给出0的例子:
x <- pnorm(-125, log.p = T) x * log10(exp(1)) 10^-.422 * 10^-3395 0.3784426e-3395
因此,如果R没有停止并舍入到0,则答案R将给予:0.3784426e-3395
0.3784426e-3395
这样做是因为得到的输出是x = exp(pnorm(q, log.p = T))。因此,要将其转换为基数10,您可以使用log规则:
x = exp(pnorm(q, log.p = T))
log10(exp(x)) = x * log10(exp(1))
1条答案
按热度按时间11dmarpk1#
正如注解所指出的,您可以使用
log.p=
参数将其转换为对数标度。然而,这给了你一个以e为基数的输出,如果你想让它像上面的例子一样以10为基数,你可以得到你想要的输出,像这样:你可以把它解释为问题中例子的力量。
示例
一些例子显示了这一点:
准确答案
下面是一个显示实际数字的示例:
由于四舍五入,这只是稍微偏离(从代码中插入实际数字以获得确切的答案)。
当然,对于更大的数字,你必须保持它的指数形式,因为R仍然会给予你0。
电话:+86-10 -332.2714
如果你想知道如果R不把很小的数字四舍五入到0,它会给予你什么,你可以把指数分开。例如,10^-2 = 10^(-1-1),或者在我们的例子中,10^-2.2 = 10^-(2 + 0.2)。因此,按照以下步骤,我们可以用
pnorm()
再次检查答案:所以我们来看看一个R给出0的例子:
因此,如果R没有停止并舍入到0,则答案R将给予:
0.3784426e-3395
为什么会这样
这样做是因为得到的输出是
x = exp(pnorm(q, log.p = T))
。因此,要将其转换为基数10,您可以使用log规则: