【发布时间】:2018-07-29 11:51:38
【问题描述】:
在 R 中我写了这个函数
ifun = function(m) {
o=c()
for(k in 1:m) {
o[k]= prod(1:k)/ prod(2*(1:k)+1 )
}
o_sum=2*(1+sum(o)) # Final result
print(o_sum)
}
我想要 ifun() 的值以获得高值。例如
sprintf("%.100f",ifun(170) )
给出这个输出:
[1] 3.141593
[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"
但是当我取更高的价值时,它可以给我任何价值。例如
sprintf("%.100f",ifun(180) )
给我这个输出
[1] NaN
[1] "NaN"
如何重写我的代码,以便我可以将ifun 用于更大的值?
另外,我使用这个函数来近似 pi,但对于
> ifun(x>50)
它一遍又一遍地给我相同的结果,并且不会使我的近似值更好。
编辑
我尝试在 Macin 系列上使用该方法,我在 R 中写了这个
mac = function(m, approx=TRUE){
o1 = as.bigq(NULL)
o2 = as.bigq(NULL)
for(k in 1:m) {
k <- as.bigq(k)
o1 = c(o1, 1/((2*k+1)*5^(2*k+1)) *(-1)^k)
o2 = c(o2, 1/((2*k+1)*239^(2*k+1)) *(-1)^k)
}
o_sum = 16*(1/5+sum(o1)) -4*(1/239+sum(o2))
if(approx){
as.numeric(o_sum)
} else{
o_sum } }
library(Rmpfr) x <- mac(250, approx=FALSE) mpfr(x,256)
这给了我一个奇怪的输出,即
> 1 'mpfr' number of precision 256 bits [1]
> 3.1415926535897934 18913264129286527160857809883357101405
它只给我前 16 个正确数字,它不能给我更多。 这可能是什么原因?
【问题讨论】: