试图计算一个接近e的公式,但程序不会工作

时间:2013-09-05 09:47:06

标签: function math

我写了一个代码来计算这个公式((2 * x + 1)/(2 * x-1))^ x并且随着x的增加,这个表达式越来越接近e = 2.7182818。当表达式和e小于.000001然后它将退出循环并显示x是什么。问题是首先它会计算错误然后当我做了一些调整时,循环开始永远继续。 感谢先进的帮助。

#include <stdio.h>
#include <math.h>

int main(){

    int x;
    float z,y;

    printf("X's value       Absolute Difference\n");
    x=1;
    y=(2*x+1)/(2*x-1);
    z=fabsf(expf(1)-pow(y,x));

    for(x=2;z>0.000001;++x){
        y=(2*x+1)/(2*x-1);
        z=fabsf(expf(1)-pow(y,x));
        printf("%d               %.7f\n",x,z);
    }
    printf("The number in which is closest to e is %d\n",x);
    printf("%.7f             %.7f\n",expf(1),pow(y,x));

     return(0);

}

1 个答案:

答案 0 :(得分:0)

y=(2*x+1)/(2*x-1)更改为y = 1.*(2*x+1)/(2*x-1)

否则,y将四舍五入为一,并且您陷入了无限循环。要看到这一点,只需在每次迭代时打印y

printf("%d               %.7f   %.7f\n",x,z, y);
                                ^^^^         ^