【发布时间】:2018-10-23 18:30:50
【问题描述】:
我目前正在阅读 Stephen Kochan 的“C 语言编程(第 3 版)”的在线版本。其中一项活动涉及评估方程式,
编写一个计算以下表达式并显示结果的程序 (记得使用指数格式显示结果): (3.31 x 10-8 x 2.01 x 10-7) / (7.16 x 10-6 + 2.01 x 10-8 )
当我尝试这样做时,输出始终为 0.0000。这是我的代码。
#include <stdio.h>
int main (void) {
float result;
result = (3.31 * pow(10,-8) * 2.01 * pow(10,-7)) / (7.16 * pow(10,-6) + 2.01 * pow(10, -8));
printf ("%f", result);
return 0;
}
如果我做错了什么,请指出。如果您有任何提示,请说出来。
【问题讨论】:
-
你可能误解了这个问题。
2.01e-7这样的“科学”符号在 C 语言中是完全合法的。 -
默认情况下您应该使用
double,只有在内存极度受限时才使用float。 -
@EugeneSh。嵌入式或移动环境总是有其怪癖。这不会改变通常
double是一个很好的默认值并且pow返回double的事实。 -
应该比这更简单:
#include <stdio.h> int main(void) { printf("%.16g\n", 3.31e-8 * 2.01e-7 / (7.16e-6 + 2.01e-8)); }应该输出9.266026935558e-10。