第六课

一、数据类型

1.浮点类型

类型 字节 范围 有效数字
float 32 ±(1.20×10∧-38~3.40×10∧38),±inf,nan 7
double 64 ±(2.2×10∧-308~1.79×10∧308),0,±inf,nan 15
类型 scanf printf
float %f %f,%e
double %lf %f,%e
1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main()
{
double a = 123456;
printf("%e,%f", a,a);

return 0;
}

输出:

1.23456e+05,123456

科学计数法

+1.11e+111

①可选的+或-符号

②小数点也是可选的

③可以用e或E

④符号可以是-或+也可以省略(表示+)

⑤整个词不能有空格

%.af 表示输出小数点后a位,这样的输出是做四舍五入的。

3.超过范围的浮点数和精度

printf输出inf表示超过范围的浮点数:±∞

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

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main()
{
printf("%f\n", 1.0/0.0);
printf("%f\n", -1.0/0.0);
printf("%f\n", 0.0/0.0);

return 0;
}

输出:

inf

-inf

nan

若为整数,会编译错误。

无穷大无法用整数来表达,但可以用浮点表达

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main()
{
float a, b, c;

a = 1.345f;
b = 1.123f;
c = a + b;
if (c == 2.468)
printf("相等\n");
else
printf("不相等! C=%.10f, 或%f\n",c,c);

return 0;
}

输出:

不相等! c=2.4679999352,或2.468000

带小数点的字面量是double而非float,float需要用f或F后缀来表明身份

两个浮点数用==判断可能会失败f1 ==f2

用fabe(f1-f2) < 1e-8或1e-12

整数内部是纯二进制,浮点数的内部是编码形式