如何通过R或重新编译修改MPFR_MAX_PREC参数?
Rmpfr精度限制问题说明
查看默认最大精度
通过Rmpfr内置函数可查看默认最大精度(单位:比特):
.mpfr_maxPrec() [1] 9.223372e+18
实际应用中的精度瓶颈
以分数1/998001为例,该分数的十进制展开会生成连续序列002003004……100101102……996997998999001……,但使用Rmpfr设置1e7比特精度计算时:
mpfr(1/(mpfr(998001,1e7)),1e7) 1 'mpfr' number of precision 10000000 bits
最终输出仅到33133233333就终止,无法获取更长序列。
调高精度时的问题
- 将精度设为1e8或1e9比特,输出结果无变化,仍停留在之前的截断位置
- 尝试设置精度为1e10比特时,直接触发错误:
mpfr(1/(mpfr(998001,1e6)),1e10) Error in .class1(object) : prec = -2147483648 < 1 is too small In addition: Warning message: In .class1(object) : NAs introduced by coercion to integer range
这里的-2147483648是-2^32,本质是32位整数溢出导致的数值转换错误,并非Rmpfr或gmp包的bug——因为底层处理精度参数时使用了32位整数类型,1e10超出了其取值范围(2^31-1约为2.1e9),导致数值被错误转换为负数,进而触发精度过小的报错。
内容的提问来源于stack exchange,提问作者Carl Witthoft
相关产品推荐
相关产品推荐

