关于float奇怪的bug
2016-07-26 11:27
288 查看
一直以为浮点数f为NaN的时候,f不会进行+-*/等计算。
偶然间发现一个不知道算不算bug的问题,当f为NaN并且第22位(尾数左一位)为0的时候,对于f的运算会把该位变成1,同时其他位不变。
奇怪的bug。
偶然间发现一个不知道算不算bug的问题,当f为NaN并且第22位(尾数左一位)为0的时候,对于f的运算会把该位变成1,同时其他位不变。
//f的二进制表示,其中x表示无所谓0或1 //x 1111 1111 0xxxx.....xxxx //第一部分是符号位,用来表示浮点数正负 //第二部分是阶码,全为1表示浮点数是NaN或者无穷 //第三部分是尾数,当阶码全为1的时候,尾数为0浮点数表示无穷;当尾数不全为0的时候表示NaN printf("%x \n", f2u(u2f(0x7f800001) + 2)); printf("%x \n", f2u(u2f(0x7f900001) - 2)); printf("%x \n", f2u(u2f(0x7fa00001) × 2)); printf("%x \n", f2u(u2f(0x7fb00001) / 2)); output: 0x7fc00001 0x7fd00001 0x7fe00001 0x7ff00001
奇怪的bug。
相关文章推荐
- NYOJ-Interference Signal
- 走遍亚洲 —— 中东
- iOS编程(双语版) - 视图 - Transform(转换)
- 深入理解JavaScript函数参数(推荐)
- pat--Sort with Swap(0, i)
- LintCode(easy)翻转字符串
- Generation and Comprehension of Unambiguous Object Descriptions
- Laravel5权限管理方法详解
- iOS 公用方法
- Java反射详解
- 如何取消codeblocks对msvcr100.dll的依赖?
- iOS编程(双语版) - 视图 - Transform(转换)
- MFC客户区拖动窗口实现
- SQLite中如何用api操作BLOB类型的字段
- Debug与Release版本区别
- ajax之ajax是什么???
- cocoapods的最新安装 遇到的坑 Error installing pods:activesupport requires Ruby version >= 2.2.2
- ajax常用操作及 跨域的实现原理
- Spring+quart
- python脚本编程:批量复制或删除文件