ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

帧同步的float double浮点型问题

帧同步的float double浮点型问题

double类型什么时候可以直接比较相等?

#include <stdio.h> #include<float.h> #include <math.h> int main() { float a = 1.0; // 因为整数位就表示好了。指数位都为0 所以整数的时候二进制为相等 printf("%d %d 值 %f %f %f\n", a == 1, a == 1.0, a, 1, 1.0); // 1, 1 1是代表相等 a = 0.1; printf("%d %d 值 %f %f %f\n", a == 0.1, a == 0.1f, a , 0.1, 0.1f); // 0, 0 float a1 = 0.3; float b1 = 0.4; float c1 = a1 + b1; printf("%d %d 值 %f %f %f \n", c1 == 0.7, c1 == 0.7f, c1, 0.7, 0.7f); // 0 printf("%d \n", fabs(c1 - 0.7) < FLT_EPSILON); // DBL_EPSILON float a2 = 10.5; float a3 = 0.5; float c3 = a2 - a3; printf("%d \n", c3 == 10); // 1 变成整数了,就可以相等了 } /* 1 1 值 1.000000 1.000000 1.000000 0 1 值 0.100000 0.100000 0.100000 0 0 值 0.700000 0.700000 0.700000 1 1 */

当然不同的编译,执行结果不同,,但是以下可以保证

1.简单的整数值, 如果两个浮点数都是整数值(没有小数部分),并且它们的值相同,那么可以直接使用"=="运算符进行比较。这是因为整数的表示方式是精确的,不会存在舍入误差) 不涉及到指数位.,直接比较二进制是相等.但是大于52bit表示整数,还是有可能会不相等)

dou

返回列表