权力计算不正确 - 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
#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)
您的代码给出了预期的结果。您可能期望错误的值。我已经重新排列了 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