为了获得1字节浮点数的Infinity,我需要添加的最小数量是多少

时间:2016-10-18 08:11:13

标签: javascript floating-point ieee-754

我试图了解由于溢出而需要添加以获取Infinity的最小数量。我已经阅读this answer了。所以,让我在这里澄清一下我的理解。为简化起见,我将使用1字节浮点,4位用于指数,3位用于尾数:

0 0000 000

我可以存储的最大正数是:

0 1110 111

当转换为科学记数法时:

   1.111 x 2^{7} = 11110000

我的理解是否正确,我应该为Infinity添加的最小数字是00010000

       11110000
+      00010000
        --------
     1 00000000

据我所知,任何低于00010000的内容都不会导致溢出,结果将四舍五入为11110000。但00010000为浮点格式的0 0000 001,而且数字为1。那么只添加1足以导致溢出吗?

1 个答案:

答案 0 :(得分:2)

答案在the other answer to the question you link to中给出。将舍入到无穷大的最小值是:

c = 2 7 ×(2 - ½×2 1-4 )= 1.9375×2 7 = 1.1111 2 ×2 7

因此,您可以添加以获得无穷大的最小值是

c - f max = 1.1111 2 ×2 7 - 1.111 2 ×2 7 = 0.0001 2 ×2 7 = 2 3

如果我理解正确,那么你提出的格式会有位模式@IBAction func calculate(_ sender: AnyObject) { let textfieldInt: Int? = Int(textField1.text!) let textfield2Int: Int? = Int(textField2.text!) let convert = textfieldInt + textfield2Int let convertText = String(convert) output.text = convertText }

更新:为什么这是特定的截止?

假设在此之上还有另一个binade,那么下一个浮点数将是

x = 1.000 2 ×2 8

请注意, c x f max 之间的值。换句话说,向上舍入到 x 的值将舍入为无穷大,但是向下舍入到 f max 的值仍然是四舍五入到相同的值。