题目是:求方程ax^2+bx+c,用3个函数分别求b^2-4ac大于0,等于0,小于0的根并输出结果,主函数输入a,b,c的值。
double和float的区别难道不是double的指数范围更广吗?那这样比程序用double也是可以的,但为什么将此程序的float变化成double后就运营不出来了,编译没错,但运营不了。
为什么这个程序用float行得通,double行不通?(语言-c语言)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 专家-皆知 2024-04-29 20:25关注
参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。
在C语言中,
float
和double
的主要区别不仅仅在于指数范围的广度,还在于精度。float
提供大约6-7位小数的精度,而double
则提供大约15位小数的精度。这在处理非常大或非常小的数字,或者在计算中需要高度精确的情况下变得重要。你提到的程序,如果在使用
float
时运行正常,但在改用double
后出现问题,通常有几个可能的原因:-
数值溢出或下溢:尽管
double
有更大的范围和精度,但在某些情况下,如果计算结果超出了即使是double
也能表示的范围,或者由于精度差异导致表达式的结果为非预期的极小值,可能会出现意料之外的行为。不过,对于方程求根的基本运算来说,这种情况不太常见,因为这些运算在数学上是定义良好的,并且通常不会直接导致溢出或下溢。 -
比较问题:在C语言中,浮点数的相等比较(
==
)是敏感的,因为浮点运算存在舍入误差。当从float
改为double
时,原本接近但不完全等于零的值,可能因为更高的精度而不再被精确地判断为零,这可能导致条件判断(if(d==0)
)不按预期工作。应该使用一个很小的正数(如epsilon
)来比较是否足够接近零,而不是直接用==
。 -
代码修改错误:在尝试从
float
转换到double
时,如果忘记修改所有相关的类型声明和函数参数,也会导致编译或运行时错误。但你提供的代码片段显示,除了类型声明从float
变为double
外,其他部分没有明显错误。不过,代码中确实存在一些格式问题和逻辑上的遗漏,例如缺少大括号来正确包围条件块。
修正后的代码示例,确保了正确的类型匹配,并使用了一个小的容差值来比较是否接近零,避免直接使用
==
进行浮点比较:#include <stdio.h> #include <math.h> void f1(double a, double b, double c) { printf("%lf %lf\n", (-b + sqrt(b * b - 4 * a * c)) / (2 * a), (-b - sqrt(b * b - 4 * a * c)) / (2 * a)); } void f2(double a, double b, double c) { printf("%lf\n", (-b / (2 * a))); } void f3() { printf("无根\n"); } int main() { double a, b, c, d; const double epsilon = 1e-9; // 定义一个很小的数来比较接近零的情况 scanf("%lf %lf %lf", &a, &b, &c); d = b * b - 4 * a * c; if (d > epsilon) { f1(a, b, c); } else if (fabs(d) < epsilon) { // 使用fabs确保正负零都视为接近零 f2(a, b, c); } else { f3(); } return 0; }
这段代码应该能正确处理
double
类型的输入,同时避免了直接用==
比较浮点数可能导致的问题。请确保在编译和运行时,你的编译器支持并正确处理了double
类型的运算。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用 -
悬赏问题
- ¥30 为什么会失败呢,该如何调整
- ¥50 如何在不能联网影子模式下的电脑解决usb锁
- ¥20 服务器redhat5.8网络问题
- ¥15 如何利用c++ MFC绘制复杂网络多层图
- ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
- ¥15 python螺旋图像
- ¥15 算能的sail库的运用
- ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
- ¥15 找代写python里的jango设计在线书店
- ¥15 请教如何关于Msg文件解析