TGTGInsighttelegram intelligenceLIVE / telegram public index
Post content
帖子内容
IEEE 754 认为二进制规约浮点数应该视为 (-1)^s * m * 2^e,其中 s 是符号位,m 是一个二进制数,其整数部分总是为 1,小数部分每一位都是 0 或 1,e 是指数。 也就是说,一般来说系数 m 应满足 1 <= m < 2,在这个形式下才按照 m * 2^e 这个公式定义指数 e。提到指数的最小值和最大值时也都是按这个标准理解的,例如规定双精度浮点数的指数最大值是 1023,所以 1.999 * 2^1023 能表示,2 * 2^1023 就超出范围了。 但 C 和 Python 提供的提取浮点数指数部分的函数 frexp 居然用的不是这个定义。它总是把系数放到 0.5 <= m < 1 这个范围内,并相应返回指数,导致一般来说它返回的指数比 IEEE 754 中常说的那个指数概念大 1。它有可能返回的最大指数是 1024,不是 1023。 当然这里怎么规定都是可以的,但采用和 IEEE 754 不同的规定会导致 emin emax 对不上,感觉平添不少混乱啊。