能力值:
( LV3,RANK:20 )
|
-
-
2 楼
#define FLT_EPSILON 1.19209290E-07F
是因為這個嗎
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个不太清楚,还没看到后面,不过早上从看了一下,发现书上这么一句话
"移动到除符号位的最高位为1处,停止移动"
这应该是IEEE编码的一个约定吧?
////////////////////////////////////////////////////////////////////////////////////////
然后现在有另外的问题,书上写的
"IEEE编码转换后得到一个近似值,存在一定误差,再将这个IEEE编码值转成
十进制小数,得到1.2516582,......这就解释了为什么C++在比较浮点数值是否
为0时,要做一个区间比较而不是直接进行等值比较"
float fTemp = 0.0001f;
if(fFloat >= -fTemp && fFloat <= fTemp)
{
// fTemp等于0
}
这里fTemp 为什么会等于零呢?
0.0001f经IEEE编码转换后,明明是0x38D1B717,大于零的啊.
这里想不通,求解.
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
计算机是对的。
0.0001 (10进制) = 1/2^14 + 1/2^15 + 1/2^17……
= 1.101…… * 2^-14 (2进制)
则
指数位: -14 + 127 = 01110001 (二进制) // 指数为127的偏移。即加上127
尾数位: 序列的开头应该是101…… // 隐藏着一个1。即小数点前面的1.默认是存在的.
那32位数开头应该是001110001101…… 就是0x38D……
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
看到你的帖子我才仔细看了下,指数部分为啥要+127啊??
==============================================
懂了。。。
|
|
|