首页 > 解决方案 > 如何在 .Machine 中增加 $double.xmax?

问题描述

我想计算一个大数字。

我的问题是有一个限制。

因此,例如,如果您运行factorial(170)它会返回:[1] 7.257416e+306.

但是,只要您想计算factorial(171)(或更大的数字),它就会返回[1] Inf.

那是因为当你跑的时候.Machine你会看到

$double.xmax
[1] 1.797693e+308

所以我的问题是,如何才能使它更大?例如,我们能做到1.797693e+500吗?

标签: r

解决方案


你不能,在基础 R 中;R 只能使用 32 位整数和 64 位浮点值进行计算。您可以使用该Rmpfr软件包:

library(Rmpfr)
factorialMpfr(200)
1 'mpfr' number of precision  1246   bits 
## [1] 788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000

该值“仅”约为 1e374,但我们可以轻松地大于该值,例如

round(log10(factorialMpfr(400)))
869

但是,这样做有一些缺点:(1)计算速度要慢得多;(2) 将这些结果拟合到现有的 R 工作流程中可能会很复杂。人们经常找到在对数尺度上进行计算的方法(您可以直接使用lfactorial()函数计算对数因子)


推荐阅读