R上的大整数乘法

R上的大整数乘法,r,permutation,biginteger,R,Permutation,Biginteger,我面临一个关于R的计算问题,我想找到阶乘10乘以0.1。我本可以在R上使用factorial()函数,但为了检查包“gmp”和“Rmpfr”的效率,我使用了factorialZ()。令人惊讶的是,我发现乘法结果是0(零)。它给出了输出大整数('bigz'):0。我该怎么办?任何线索都会有帮助。谢谢。我不知道为什么会发生这种情况(我认为这取决于被乘数是否有精确的二进制表示,但我认为我错了)。更可能的是,这只是一种未定义的行为——即,包作者没有具体的理由让bigz对象与常规的Rnumeric对象配合

我面临一个关于R的计算问题,我想找到阶乘10乘以0.1。我本可以在R上使用factorial()函数,但为了检查包“gmp”和“Rmpfr”的效率,我使用了factorialZ()。令人惊讶的是,我发现乘法结果是0(零)。它给出了输出大整数('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
类型(高精度浮点):


本·博克,谢谢你的建议。其实上面这部分只是我想看的一个例子。我最初的计算涉及到由其他来源生成的随机浮点乘法。因此,不可能手动乘法。我想知道是否有专门的程序来处理这种情况。我们需要更多的背景来提供有用的答案。生成的阶乘是否会太大,以至于需要大整数类型?如果乘以一个存储为标准(固定精度)浮点的值,那么无论如何都会丢失大整数的精度。(这些数字是否太大以至于不能存储在双精度浮点中,例如>1e310?)
.bigz2mpfr(factorialZ(200))*0.1
1 'mpfr' number of precision  1248   bits 
[1] 78865786736479054733166935894034745829709731011205555800275415888196330271667643800669079467809137225619298895315986676109948164059578143835819967701344559489245054862932798359603276806168730010575811932061231243634893448846943919677538088311404392920603667803910252938083642743828224123449104546887425346845059274452636794880000000000000000000000000000000000000000000000000