C语言day02-浮点类型
一、浮点类型
类型 | 字长 | 值范围 | 有效位 |
---|---|---|---|
float | 32 | -3.4E+38 ~ -1.2E-38;1.2E-38 ~3.4E+38;0;±inf;nan | 6 |
double | 64 | -1.7E+308 ~ -2.3E-308;2.3E-308~1.7E+308;0;±inf;nan | 15 |
1.1 输入输出
类型 | scanf | printf |
---|---|---|
float | %f | %f,%e |
double | %lf | %f,%e |
实例1:
int main(int argc, char const *argv[])
{
double ff = 1234.456789;
printf("e-ff:%e\n", ff);
printf("E-ff:%E\n", ff);
printf("f-ff:%f\n", ff);
return 0;
}
输出:
e-ff:1.234457e+003
E-ff:1.234457E+003
f-ff:1234.456789
1.2 输出精度
在%
和f
之间加上.n
可以指定小数点后几位,这样的输出是做四舍五入的
printf("%.3f\n",-0.0049);
printf("%.30f\n",-0.0049);
printf("%.3f\n",-0.00049);
实例2:
int main(int argc, char const *argv[])
{
printf("%.3f\n",-0.0049);
printf("%.30f\n",-0.0049);
printf("%.3f\n",-0.00049);
return 0;
}
结果:
-0.005
-0.004899999999999999800000000000
-0.000
二、范围与精度
2.1 范围
- inf:±∞
- nan:不存在的浮点数
实例3:
int main(int argc, char const *argv[])
{
printf("%f\n", 12.0/0.0);
return 0;
}
打印:
1.#INF00
2.2 精度
实例4:
int main(int argc, char const *argv[])
{
float a, b, c;
a = 1.345f;
b = 1.123f;
c = a + b;
if (c == 2.468)
{
printf("相等\n");
}else{
printf("不相等!c = %.10f,或者%f", c, c);
}
return 0;
}
输出:
不相等!c = 2.4679999352,或者2.468000
三、内部表达
以编码的形式
- 浮点数在计算时是由专用的硬件部件实现的
- 计算double和float所用的部件是一样的