微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自 gmp 的 big int 在 R 中使用 Reduce(accumulate) 无法正常工作

如何解决来自 gmp 的 big int 在 R 中使用 Reduce(accumulate) 无法正常工作

我在 R 中使用 gmp 库,我偶然发现了以下问题,不知何故累积函数无法处理类 bigz。它给出了奇怪的结果。我附上了同样的reprex。 请有人建议这里发生了什么以及我该如何解决这个问题。更大的问题是,我有数字作为文本的文件(数字非常大),我需要对它们进行一些计算,因为 R 会降低大数字的精度(例如:900719925474099212 更改为 900719925474099200 ) ,因此为此使用 gmp。如果不是 gmp,那么我有哪些选择?感谢您的调查。如果这篇文章重复,我会删除它,但我搜索过在其他地方找不到这个问题。如果我在这里做了一些愚蠢的事情,请告诉我。

library(gmp)
#> 
#> Attaching package: 'gmp'
#> The following objects are masked from 'package:base':
#> 
#>     %*%,apply,crossprod,matrix,tcrossprod
library(purrr)

x <- c(9,16,7,178)
Reduce(`*`,x,accumulate = TRUE)
#> [1]      9    144   1008 179424
accumulate(x,`*`)
#> [1]      9    144   1008 179424
x_big <- as.bigz(x)
class(x_big) ## bigz
#> [1] "bigz"
print(x_big)
#> Big Integer ('bigz') object of length 4:
#> [1] 9   16  7   178
Reduce(`*`,x_big,accumulate = FALSE)
#> Big Integer ('bigz') :
#> [1] 179424
Reduce(`*`,accumulate = TRUE) ## doesn't work correctly
#>  [1] 01 00 00 00 01 00 00 00 01 00 00 00 09 00 00 00 01 00 00 00 01 00 00 00 01
#> [26] 00 00 00 90 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 f0 03 00 00 01 00
#> [51] 00 00 01 00 00 00 01 00 00 00 e0 bc 02 00
accumulate(x_big,`*`) ## doesn't work correctly
#>  [1] 01 00 00 00 01 00 00 00 01 00 00 00 09 00 00 00 01 00 00 00 01 00 00 00 01
#> [26] 00 00 00 90 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 f0 03 00 00 01 00
#> [51] 00 00 01 00 00 00 01 00 00 00 e0 bc 02 00

reprex package (v0.3.0) 于 2021 年 3 月 31 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。