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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构