gpt4 book ai didi

c - 使用 C 语言编程,使用 pow 函数

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:55 25 4
gpt4 key购买 nike

这是我用C程序写的部分代码---

else if((pow(b,2.0)-4*a*c)>0) {
printf("\nRoots=%.2f and %.2f\n",
(-b+pow(b*b-4*a*c,0.5))/(2*a),
(-b-pow(b*b-4*a*c,0.5))/(2*a));
} else
printf("\nBoth roots are %.2f\n",-b/(2*a));

在控制台中,如果我将 a 写为 1,将 b 写为 14c 作为 49,如果说“根 =-7.00 和 -7.00”...而不是说“两个根都是 -7.00”但是如果我替换 pow 它会显示后一个结果(b,2) by b*b in else if 条件....为什么会这样?请解释。

最佳答案

请在您的代码中包含一个最低限度的工作示例。

无论如何,它可以在我的系统上运行(Debian GNU/Linux 测试,gcc 5.2.1):

#include <math.h>
#include <stdio.h>
int main() {

float a,b,c;
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);

if ((pow(b,2.0)-4*a*c)<0)
printf("\nNo roots!\n");
else if((pow(b,2.0)-4*a*c)>0) {
printf("\nRoots=%.2f and %.2f\n",
(-b+pow(b*b-4*a*c,0.5))/(2*a),
(-b-pow(b*b-4*a*c,0.5))/(2*a));
} else
printf("\nBoth roots are %.2f\n",-b/(2*a));
return 0;
}

如果我输入 1、14、49,程序会回答 两个根都是 -7.0。但这可能因系统而异,因为您使用的是浮点运算,我不知道您的pow() 函数是如何实现的。并非所有实数都可以在计算机上表示——这里很好地描述了它是如何工作的 single precision floats .每个编译器/运行时环境可能会有不同的数学库实现(其中包括您使用过的 pow)。

因此,如果可能的话,我会完全避免使用 pow。请改用 b*b,并在真正需要时保存 pow。正如 Tom Karzes 所提到的,sqrt 也比使用 pow 计算平方根要好。

最后一件事:只计算一次判别式将使您的程序更具可读性:

#include <math.h>
#include <stdio.h>

int main() {

float a,b,c;
float delta;
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);

delta = b*b-4*a*c;

if (delta<0)
printf("\nNo roots!\n");
else if(delta>0)
printf("\nRoots=%.2f and %.2f\n",
(-b+sqrt(delta))/(2*a),
(-b-sqrt(delta))/(2*a));
else
printf("\nBoth roots are %.2f\n",-b/(2*a));
return 0;
}

你可以尝试的另一件事是使用 double 而不是 float,这样你会有更高的精度(不相关取决于你将使用的数字, 但如果您没有可能占用太多内存的巨大数字矩阵,则使用 doubles 是个好主意——double 占用的内存是 float 表示)。

关于c - 使用 C 语言编程,使用 pow 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com