在floatf格式说明符和pow函数中C浮点或双精度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在floatf格式说明符和pow函数中C浮点或双精度相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <math.h>
int main(void){
printf("%lf
", pow(1.0, 2.0));
printf("%f
", pow(1.0, 2.0));
return 0;
}
第一个printf()
给出输出0.000000
但第二个printf()
给出输出1.000000
。为什么?
在Windows 7 64位上使用Codeblocks。
使用gcc命令编译给我一个.exe,为两个语句输出1.000000。
如果我编译在Codeblocks上按F9,第一个语句得到0.000000,第二个语句得到1.000000。
最后,如果我从Codeblocks中的源代码中删除#include <stdio.h>
,所有都给我1.000000(没有警告或错误)。
您的代码应在C99或C11编译器上为两行打印相同的值。 float
的所有printf
论据总是转换为double
,而%lf
和%f
都做同样的事情(打印double
)。
在C89标准中,%lf
说明符是未定义的行为,double
s应该只用%f
打印。所以也许你正在使用一个不支持C99标准的旧编译器。
有关%lf
的标准的相关部分:
公寓,H.19.T.1 / H:
l(ell)[...]对随后的a,A,e,E,f,F,g或G转换规格没有影响。
公寓,4.s.t 1:
[...]一个可选的l(ell),指定后续的d,i,o,u,x或X转换说明符适用于long int或unsigned long int参数;一个可选的l,指定后面的n转换说明符适用于指向long int参数的指针; [...]如果h,l或L与任何其他转换说明符一起出现,则行为未定义。
以上是关于在floatf格式说明符和pow函数中C浮点或双精度的主要内容,如果未能解决你的问题,请参考以下文章