r - 如何在 .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 只能使用 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()
函数计算对数因子)
推荐阅读
- javascript - 即使没有设置值,useState 也会发生变化
- mod-security - 如何将此 modsecurity 规则限制为一个文件?
- php - 如何在 sublimetext3 中使用 php?
- excel - 如何使用计算字段对数据透视表中的负数求和?
- java - 杰克逊注释转换 BigDecimal 值并将比例设置为 2
- ios - 调整具有 2 个原型单元格的表格视图单元格
- java - Struts 2 ~ 启动套接字的最佳位置?
- flutter - 从未来函数获取数据到文本小部件
- ios - 将角半径应用于 Storyboard 内的特定 UIView 角不适用于所有角
- raku - Perl6 中的 Sub vs Blocks - 又名罗马数字挑战