权力计算不正确 - C

Incorrect calculation of powers - 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);
  }  
}

我得到的变量 c 的值不正确,不知道为什么。尝试围绕包围工作并试图避免 pow() 函数,不知道还能尝试什么。

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

a * e^(1/(i+1)) + (1/b)

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

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

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

我还在循环中移动了 printf 语句以输出所有值。 <math.h> header 肯定是必须的,你不需要重新定义 M_E,它已经在header 中定义了,比你定义的准确率高得多。

我已经编辑了代码以满足 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/(double)i+1

应该是

1/((double)i+1)

甚至

1.0 / (i + 1)

公式编码错误

为了反映以下公式: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 目标 .

3.797441

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

#define M_E 2.7182818284590452353602874713527
// output
3.797443