我试图了解由于溢出而需要添加以获取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
足以导致溢出吗?
答案 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 的值仍然是四舍五入到相同的值。