IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。
以 IEEE 754 标准指定的 64 位双精度浮点数 (double) 由三个部分构成,从高位到低位依次是:符号 S (1位) + 指数 E (11位) + 尾数 F (52位)。一个双精度浮点数 N 的大小由下列公式确定:
-
规约数 (1≤E≤2046): N=(−1)S×(1.F)2×2E−1023;
-
非规约数 (E=0): N=(−1)S×(0.F)2×2−1022;
-
正负无穷(E=2047,F 全为 0):N=±inf,正负取决于符号位 S,如果符号位 S=1,则为 −inf;否则为 (+)inf;
-
非数(E=2047, F 不全为 0):N=NaN。
一个例子:
| Sign(1 bit) |
Exponent(11 bits) |
Fraction(52 bits) |
| 1 |
10000000101 |
11010000(0...) |
上面表格所表示的数就是 (−1)1×(1.1101)2×21029−1023=−116。其中 (1.1101)2=20+2−1+2−2+2−4,代表一个二进制表示的小数。
现在给你一个实数在 IEEE 754 双精度浮点数标准下的二进制表示,求其对应的实数,或判断其是正负无穷或非数。如果答案不是 ±inf 或者 NaN,那么你的答案与标准答案的相对误差不超过 10−12 即可判定为正确。
即假设你的输出是 pans,标准答案是 jans,那么你的答案会被当做是正确的当且仅当 ∣jans∣∣pans−jans∣≤10−12。