功率计算不正确-C

时间:2018-12-08 15:37:48

标签: c formula

viewDidAppear

我得到的变量c值不正确,不知道为什么。尝试解决包围问题,并尝试避免使用#include <stdio.h> #include <math.h> #define M_E 2.71828 double a, b, c; double d; void main() { scanf("%lf", &a); scanf("%lf", &b); for (int i = 1; i <= 40; i++) { c = a * pow(M_E,(1/(double)i+1)) + (1/b); printf("%lf\n", c); } } 函数,不知道还有什么可尝试的。

->我需要我的代码来反映以下公式:

pow()

From comment如果我输入a的值为2和b的值为2-我应该得到3.79744 ...但是我得到6.074。

3 个答案:

答案 0 :(得分:0)

您的代码给出了预期的结果。您可能期望错误的值。我已经重新排列了c表达式中的括号,以显示实际情况。

您还应该将pow替换为exp函数,因为您实际上是指数函数。在下面的代码中查看如何计算新变量d

我还在循环内移动了printf语句以输出所有值。 <math.h>标头绝对是必需的,并且您不需要重新定义M_E,因为它已经在标头中定义了,准确性比您要高得多。

我已编辑代码以满足c = a * e^(1/(i+1)) + (1/b)的新要求。

#include <stdio.h>
#include <math.h> // This is necessary!!

double a, b, c;

double d;

int main(int argc, char *argv[])
{
scanf("%lf", &a);
scanf("%lf", &b);
for (int i = 1; i <= 40; i++)
{
  c = a * pow(M_E, 1/(double)(i + 1)) + (1/b);
  d = a * exp(1/(double)(i+1)) + (1/b); //this is equal to c!
  printf("%e\n", c); //use %e to print doubles
}  
}

答案 1 :(得分:0)

错误出在

1/(double)i+1

应为

1/((double)i+1)

甚至

1.0 / (i + 1)

答案 2 :(得分:0)

公式的编码错误

反映以下公式:a * e ^(1 /(i + 1))+(1 / b)。

加1然后除。

//                     v------------v 
// c = a * pow(M_E,(   1/ (double)i+1   )) + (1/b);
c    = a * pow(M_E,(   1/((double)i+1)  )) + (1/b);

输出达到OP目标I should be getting 3.79744...

3.797441

使用更准确的e,代码可以获得更准确的结果。

#define M_E 2.7182818284590452353602874713527
// output
3.797443