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

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。

posted @   lwj1239  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示