有人可以解释这个浮点行为吗?

Bjö*_*lex 4 python floating-point ieee-754

这个问题的启发,我试图找出那里到底发生什么(我的答案更直观,但我不能完全理解它的原因).

我相信它归结为此(运行64位Python):

>>> sys.maxint
9223372036854775807
>>> float(sys.maxint)
9.2233720368547758e+18
Run Code Online (Sandbox Code Playgroud)

Python使用IEEE 754浮点表示,有效地为53位.但是,据我所知,上面例子中的重要内容需要57位(如果丢弃隐含的前导1,则为56位).有人可以解释这种差异吗?

NPE*_*NPE 6

也许以下内容有助于澄清问题:

>>> hex(int(float(sys.maxint)))
'0x8000000000000000L'
Run Code Online (Sandbox Code Playgroud)

这表明它float(sys.maxint)实际上是2的幂.因此,在二进制中它的尾数是精确的1.在IEEE 754 1.中暗示了前导,因此在机器表示中,该数字的尾数由所有零比特组成.

实际上,表示此数字的IEEE位模式如下:

0x43E0000000000000
Run Code Online (Sandbox Code Playgroud)

观察到只有前三个半字节(符号和指数)不为零.有效数字完全由零组成.因此,它不需要表示56(也不是53)位.