2023年11月6号专业学习总结

发布时间 2023-11-07 00:31:32作者: lwj1239

1. 浮点数的精度问题

在计算机中,浮点数不能像整数一样精确的表示出来,存放的是它的近似值。

例如,存放0.3在计算机中可能是0.2999999999,或者是0.3300000001。

这种情况会对比较操作进行干扰,==这个运算符就不对了(在c/c++中"=="要完全相同才是true),所以我们需要一个极小的数eps来帮我们纠正这个误差。

等于区间的示意图

当两个浮点数a和b进行"=="比较的时候,只要a落在[b - eps, b + eps]这个区间上,我们就认为a和b是相等的

假设eps = 1e6, 代码表示为fabs(a - b) < eps,当满足这个条件我们就认为这两个浮点数相等。

2. 无符号数和有符号的数进行比较

上面这个程序的输出是no,相信按照正常的逻辑这个应该打印的是yes。

原因:sizeof返回值是一个无符号的数,但-1是有符号的数。当有符号的数和无符号的数进行比较,计算机是将有符号的数转化为无符号的数再进行比较,又因为有符号的数在计算机中是以补码的形式存放,-1的补码是全1,转化为无符号的值是无符号能表示最大的正数,因此比sizeof(int)要大所以输出no。