R 上的大整数乘法

Big integer multiplication on R

我在 R 上遇到以下计算问题。我想找到阶乘 10 与 0.1 的乘积。我本可以在 R 上使用 factorial() 函数,但为了检查包 "gmp" 和 "Rmpfr" 的效率,我使用了 factorialZ()。令人惊讶的是,我发现乘法结果为 0(零)。它给出输出 Big Integer ('bigz') : 0。我该如何处理这个问题?任何线索都会有所帮助。谢谢。

我不确定为什么会这样(我认为这取决于被乘数是否具有精确的二进制表示,但我认为我错了)。更有可能它只是一个未定义的行为 - 即没有特定的原因包作者应该让 bigz 对象与常规 R numeric 对象很好地配合。如果你想除以 10,就这样做:

factorialZ(10)/10
Big Rational ('bigq') :
[1] 362880

或先转换回常规 R 整数:

as.integer(factorialZ(10))*0.1
[1] 362880

如果您有一个数字不能表示为 R 整数或数字(例如 > 1e310)但需要在浮点值运算中使用它,可以转换成mpfr类型(高精度浮点数):

.bigz2mpfr(factorialZ(200))*0.1
1 'mpfr' number of precision  1248   bits 
[1] 78865786736479054733166935894034745829709731011205555800275415888196330271667643800669079467809137225619298895315986676109948164059578143835819967701344559489245054862932798359603276806168730010575811932061231243634893448846943919677538088311404392920603667803910252938083642743828224123449104546887425346845059274452636794880000000000000000000000000000000000000000000000000