下面是我用matlab编写的逼近pi的程序,请问为什么我的k越大反而pi不在我规定的区间内了呢

img

img

因为双精度数有舍入误差,建议全部按照符号变量来进行运算,这样舍入误差就不会出现了

for k=2:10
    syms a n tol e l u tol
    tol=10^(-sym(k));
    a=sym(1);
    n=sym(6);
    n=2*n;
    a=sqrt(2-sqrt(4-a^2));
    l=a*n/2;
    u=l/sqrt(1-a^2/2);
    p=(u+l)/2;
    e=(u-l)/2;
    d=p-e;
    f=p+e;
    
    while(double(eval(e))>=double(eval(tol)))
        n=2*n;
        a=sqrt(2-sqrt(4-a^2));
        l=a*n/2;
        u=l/sqrt(1-a^2/2);
        p=(u+l)/2;
        e=(u-l)/2;
        d=p-e;
        f=p+e;
    end
    d=vpa(d,50)
    f=vpa(f, 50)
    vpa(pi,50)
    p=pi>d&&pi<f
end
%If the return value is 1, pi is in the interval. If it is 0, pi

结果就可以很nice啦
如有帮助,还望题主给个宝贵的采纳支持一下答主答题哟,谢谢啦