两个极短程式一问...

来源:百度知道 编辑:UC知道 时间:2024/06/15 15:28:40
为什麼程式甲输出会是999.999023呢?后面为什麼会多了 0.000023 呢?
为什麼程式乙就不会有这样的问题?它可以正常输出 999.999000。

※使用编译器 Turbo C 2.0

/*程式甲*/

#include <stdio.h>

void main()
{
float num=999.999;
printf("%f",num);
}

/*程式乙*/

#include <stdio.h>

void main()
{
double num=999.999;
printf("%lf",num);
}
可是不是说有六至七位的精确度吗?0.000023不是还在精确的范围内,不该出现吗?

由于二进制与十进制之间转换产生的误差。

double精度高,有效数字16位,float精度7位

所以double没显示0.000023

浮点数的精度是有限的,单精度只能保证6位有效数字,双精度最多能保证16位(大概是这个数字),总之是有限的。你如果知道了浮点数的表示方式你就知道为什么了。