擅长:python、mysql、java
<p>再加上第三个例子。在</p>
<p>在ieee754中,无穷定义为将所有指数位设置为1
所有尾数都归零。带负片
无穷大,符号位也设为1。这意味着只有零位将属于尾数。在</p>
<pre><code>import struct
def float_bin(f):
"as bin function, but converts floats to their binary representation"
bytes_ = struct.pack("d", f)
format_ = "{:08b}" * len(bytes_)
binary = format_.format(*bytes_[::-1])
return binary
mantissa_bits = float_bin(float("-inf"))
# mantissa_bits == "1111111111110000000000000000000000000000000000000000000000000000"
print(mantissa_bits.count("0")) # prints 52... (rather than 53)
</code></pre>
<p>最后一点在哪里?ieee754明确地为尾数指定了53位,但只存储了52位。这是因为尾数的前导部分是隐含的。
所有用科学记数法表示的数字必须以
非零位数。例如,<code>0.123 * 10^5</code>无效。相反,正确的表示是<code>1.23 * 10^4</code>。
然而,由于二进制中只有一个非零位,所以这个位只能取一个值。因此,显式地存储此位将是一种浪费。意思是,对于53位尾数,您只需要存储52位。在</p>