【问题标题】:How to work with large numbers in R?如何在 R 中处理大数?
【发布时间】:2014-04-23 08:44:41
【问题描述】:

我想更改 R 计算中的精度。例如,我想用 x = c(-2.5e+59, -5.6e+60) 计算 x^6。为了计算它我应该改变R中的精度,否则结果是Inf,我不知道该怎么做。

【问题讨论】:

  • 这更多是关于 R 而不是 RStudio——如果这是一个超越双精度的问题,那么还有其他问题需要担心(比如 R 链接到的库的精度)。这也可能是幂运算(通常在语言后端通过调用exp() 实现)与重复乘法不同的浮点运算的时候之一,这在接近精度边缘时可能会产生重要后果。跨度>
  • 这个stat.ethz.ch/R-manual/R-patched/library/base/html/zMachine.html 应该可以帮助您了解架构的限制,这可以成为寻找可以帮助您克服任何内置限制的软件包的良好跳板。
  • 感谢您的帮助和您为回答所花费的时间

标签: r precision largenumber


【解决方案1】:

正如 Livius 在他的评论中指出的那样,这是 R(实际上是大多数编程语言)的一个问题,即数字如何以二进制表示。

要处理极大/极小的浮点数,您可以使用Rmpfr 库:

install.packages("Rmpfr")
library("Rmpfr")
x <- c(-2.5e+59, -5.6e+60)
y <- mpfr(x, 6)  # the second number is how many precision **bits** you want - NB: not decimal places!
y^6
# 2 'mpfr' numbers of precision  6   bits 
# [1] 2.50e356 3.14e364

要处理比 R 可以处理的更大的数字(例如 exp(1800)),您可以使用“Brobdingnag”包:

install.packages("Brobdingnag")
library("Brobdingnag")

## An example of a single number too large for R: 
10^1000.7
# [1] Inf

## Now using the Brobdingnag package:
10^as.brob(1000.7)
# [1] +exp(2304.2)

【讨论】:

  • Numerical Mathematics Task View 中有专门的“多精度算术和符号数学”部分。
  • 感谢您的帮助和您为回答所花费的时间
  • 我仍然无法在 R 中显示像 exp(1800) 这样的数字,对吗?
  • @PeterPan 我已经更新了我的答案以包含有关开始大于 R 可以处理的数字的信息
猜你喜欢
  • 2020-11-19
  • 1970-01-01
  • 2017-09-24
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多