【问题标题】:c program to calculate value of e^x, correct upto 10 decimal placesc程序计算e^x的值,最多修正小数点后10位
【发布时间】:2020-12-11 11:07:25
【问题描述】:

我正在编写一个程序,根据展开公式计算 e^x 的值。我需要打印答案,使其正确到小数点后 10 位。我曾尝试使用 for、while 和 do while loop 来执行此操作,但是我无法弄清楚在哪里终止循环,使用哪个条件来终止循环。我写的代码如下:

#include<stdio.h>
#include<math.h>
int factorial(int x);
int main()
{
    int x,n;
    float sum,d_1;
    printf("Enter the value of power :");
    scanf("%d",&x);
    n=1;sum=1;
    while(sum <= %.10f)
    {
        d_1=pow(x,n)/factorial(n);
        sum=sum+d_1;
        n++;
    }
    printf("Answer is %f",sum);
    return 0;
}
int factorial(int y)
{
    int fact=1,i;
    for(i=1;i<=y;i++)
    {
        fact=fact*i;
    }
    return(fact);
}

我在 %. 请帮忙。

【问题讨论】:

  • 语法错误就在编译器告诉你的地方:while(sum &lt;= %.10f) 你正在尝试使用printf 格式说明符作为浮点常量。这没有任何意义。将%.10f 替换为实际数字,语法错误就会消失。另外,如果准确性很重要,您应该真正使用double 而不是float
  • float不会得到 10 位小数精度。 factorial() 函数也只能在 11! 之前使用。获得小数点后 10 位精度的一种方法是查看从一次迭代到下一次迭代的值变化,并在它不显着时停止。
  • 嗨,Tom Karzes 和 Weather Vane,感谢您的回复。由于我是一个完整的新手,您能详细说明一下吗?
  • 特别是我无法理解我应该使用哪个条件来终止循环
  • 另外,您正在尝试使用 sum 的值作为循环终止条件。仅当您可以将其与所需的最终值进行比较时才有意义,因为您尚未计算它,所以您不能这样做。您需要根据您实际知道的项数或下一项的大小来终止循环。

标签: c loops for-loop while-loop infinite


【解决方案1】:

您想在当前项小于某个值时终止循环。您还希望循环至少执行一次,因此最好使用 do-while 循环:

n = -1;
do {
    n++;
    d_1 = pow(x, n) / factorial(n);
    sum = sum + d_1;
} while (d_1 > epsilon);

正如 cmets 中所述,代码在精度和溢出方面还存在其他问题,但这是另一回事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2017-04-04
    相关资源
    最近更新 更多