【C语言细节】计算自然对数的底 e遇坑

问题

在这里插入图片描述

代码

#include <stdio.h>
#include <math.h>
int main() {
    double a = 2,y;
    long int n=1;
    do{
        y=a;
        n+=1;
        a=pow(1+1/(double)n,(double)n);
    }while(a-y>1e-6);
    printf("e = %f\nn = %ld\n",a,n);
    return 0;
}
}

结果

在这里插入图片描述

注意

在我写代码时,遇到了一个坑。题目中括号跟你讲的n为充分大的正整数,当然是要定义long int n;那么问题来了,pow()函数的原型是:double pow(double x,double y);因此n需要进行强制转换类型才可以正确输出结果。同时printf()中的格式转换为%ld

发布了59 篇原创文章 · 获赞 44 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章