在C语言中,printf输出inf表示超过范围的浮点数:±∞(inf,-inf)

printf输出nan表示不存在的浮点数

注意:

  • 带小数点的字面量是double而不是float
  • float需要用f或F后缀来表明身份
  • 浮点运算是没有精度的,如f1==f2可能失败(判断两个浮点数,float是七个有效数字),若要判断浮点数,需要使用fabs(f1-f2)<1e-12

在选择浮点类型时,如果没有特殊需要,只使用double。现代CPU能直接对double做硬件运算,性能不会比float差,在64位的机器上,数据存储的速度也不比float慢。

类型 字长 范围 有效数字
float 32 ±(1.20x10-38~3.40x1038),0,±inf,nan 7
double 64 ±(2.2x10-308~1.79x10308),0,±inf,nan 15

float 占据4个字节,double占据8个字节,由他们的范围可知,存在靠近0但不等于0的区间内,是float和double表达不出来的。

类型 scanf printf
float %f %f,%e
double %lf %f,%e

当printf使用%e时,它会以科学计数法来表示那个数字,注:科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10,a不为分数形式,n为整数),这种记数法叫做科学记数法。例如:19971400000000=1.99714×10^13。计算器或电脑表达10的幂是一般是用E或e,也就是1.99714E13=19971400000000(摘选百度百科)

 

 输出精度的时候,我们可以通过在%和f之间加上.n可以指定输出小数点后几位,这样的输出是做4舍5入的

例如:printf("%.3f",-0.0049)   输出结果:-0.005

float和double表示的数字是存在误差的,但是double相对来说精度要高,那么误差要小,尽管而言,那还是会存在误差的,这是无法避免的