C语言double值一样系统却判断不相等,求解??

Python016

C语言double值一样系统却判断不相等,求解??,第1张

double值在计算机中用的64个bit来表示,浮点数格式,因为精度比较高,所以显示给你看的时候,通常都是经过舍弃精度(简单理解成四舍五入),你看到的2.00000和2.000000很可能真的不一样,所以比较好的做法是,当两个double数,相差不超过0.0000001的时候,就认为他们是一样的。

double占8个字节(64位)内存空间,最多可提供16位有效数字,小数点后默认保留6位。如全是整数,最多提供15位有效数字。测试代码如下,

#include <stdio.h>

#include <math.h>

int main(int argc, char *argv[])

{

printf("%lf\n",123456789012345678.789)//输出123456789012345680.000000

printf("%lf\n",(double)123456789012345678)//输出123456789012345680.000000

printf("%lf\n",1234567890.1234567)//输出1234567890.123457

return 0

}

对于double类型数据,通常不能与0直接比较,而是通过其绝对值小于给定的容差值来判断是否满足精度需求,"float.h"头文件往往定义了基本数据类型能够表示的数据的最大值和最小值,比如,

#define DBL_MIN 2.2250738585072014e-308 //宏定义了double类型最小正数