Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的pow()有问题_C_Exponent - Fatal编程技术网

C中的pow()有问题

C中的pow()有问题,c,exponent,C,Exponent,我目前正在阅读Stephen Kochan的在线版《C语言编程(第三版)》,其中一项活动涉及评估方程式 编写一个计算以下表达式并显示结果的程序 (请记住使用指数格式显示结果): (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 * po

我目前正在阅读Stephen Kochan的在线版《C语言编程(第三版)》,其中一项活动涉及评估方程式

编写一个计算以下表达式并显示结果的程序 (请记住使用指数格式显示结果): (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;
}
#包括
内部主(空){
浮动结果;
结果=(3.31*pow(10,-8)*2.01*pow(10,-7))/(7.16*pow(10,-6)+2.01*pow(10,-8));
printf(“%f”,结果);
返回0;
}
如果我做错了什么,请指出。如果你有什么建议,请说出来。

你必须
#包括

另外,更改为:

printf ("%e\n", result);
你可能也应该有

double result;
因为
pow()
返回一个
double
,所以必须
#包含

另外,更改为:

printf ("%e\n", result);
你可能也应该有

double result;


因为
pow()
返回一个
double

,所以您肯定误解了这个问题。像
2.01e-7
这样的“科学”符号在C语言中是完全合法的。默认情况下,您应该使用
double
float
,只有当您的内存非常有限时才使用。@EugeneSh。嵌入式或移动环境总是有其独特之处。这并没有改变这样一个事实,即通常
double
是一个很好的默认值,
pow
返回
double
。它应该比这更简单:
#include int main(void){printf(%.16g\n',3.31e-8*2.01e-7/(7.16e-6+2.01e-8))}
应输出
9.266026935558e-10
。无论如何,您可能误解了这个问题。“科学”符号(如
2.01e-7
在C中是完全合法的。默认情况下,只有在内存受到极大限制时才使用
float
。@EugeneSh。嵌入式或移动环境总是有其独特之处。这并没有改变这样一个事实,即通常情况下,
double
是一个很好的默认值,
pow
返回
double
。它应该比这更简单:
#include int main(void){printf(%.16g\n',3.31e-8*2.01e-7/(7.16e-6+2.01e-8))}
应该输出
9.266026935558e-10
。我没有投票,但这可能是因为这个答案忽略了未声明
pow
。编译器可能给了它一个隐式声明,其中返回
int
。那么实数
pow
的行为是未定义的。而
pow
返回
double
并不意味着应该将其结果分配给
double
。这里有一些关于什么是真正需要的问题,但正确性不是一个直接的问题。不知道为什么人们会憎恨它,因为它显示了正确的价值。默认的
%f
符号缺少足够的精度。这里的答案是
0.000000000 9266026955799825448
@ericpepischil谢谢。我确实收到了那个警告,但它依赖于编译器吗?这里是Diwnvoter。这个答案部分是正确的(需要e格式),部分是无用的(切换到double是无害的,但不需要解决问题),并且缺少一个非常(最?)重要的部分(要使用
pow
,必须
#包含
。该程序可能仍然可以与一些没有最后一部分的编译器一起工作,尽管这是非标准的,也没有任何保证。因此,是的,可能否决投票太快了。这个答案实际上缺少的是,根本没有理由使用
pow
。)没有投票,但可能是因为这个答案忽略了说明未声明
pow
。编译器可能给了它一个隐式声明,其中返回
int
。那么实数
pow
的行为是未定义的。
pow
返回一个
double
并不意味着一个人应该d将其结果分配给一个
。这里有一些真正需要的问题,但正确性不是一个直接的问题。不确定人们为什么讨厌它,因为它显示了正确的值。默认的
%f
符号缺乏足够的精度。这里的答案是
0.000000000 9266026955579825448
@ericppostshil谢谢。我确实收到了这个警告,但是编译器依赖吗?这里是Diwnvoter。这个答案部分正确(需要e格式),部分无效(切换到double是无害的,但不需要解决问题),并且缺少一个非常(最重要的?)重要的部分(要使用
pow
,必须
#包含
。该程序可能仍然可以与一些没有最后一部分的编译器一起工作,尽管这是非标准的,并且没有任何保证。因此,是的,可能否决投票太快了。这个答案实际上缺少的是,对于这个问题根本没有理由使用
pow