[英]When does a floating point number overflow?
為什么是
Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE
=> false
但
Number.MAX_VALUE + Number.MIN_VALUE == Number.MAX_VALUE
=> true
?
我的期望是,我添加到最大值的所有內容都必須溢出。
像這樣想象:
MAX_VALUE =無限
MIN_VALUE = 0
因此,當您將MAX_VALUE與MIN_VALUE相加時,就像您添加了0。因此仍為MAX_VALUE。
可以將其視為所有非零數字都在很遠的右邊,因此它們沒有凈作用。
JavaScript的Number.MAX_VALUE
被錯誤命名。 它不是最大可表示值。 它是最大可表示的有限值。 實際最大可表示值是無窮大。
如果名稱正確,則Number.MAX_VALUE
為無窮大,則Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE
將為true,因為無窮大加無窮Number.MAX_VALUE + Number.MAX_VALUE == Number.MAX_VALUE
真。
由於Number.MAX_VALUE + Number.MAX_VALUE
的數學值超出了可表示的有限值,因此將其舍入為無窮大。
Number.MAX_VALUE + Number.MIN_VALUE == Number.MAX_VALUE
為true,因為算術四舍五入到最接近的可表示值,並且將一個小值加到最大有限值會產生非常接近最大有限值的結果,因此將其四舍五入到最大值有限值。
(注意:關於四舍五入到最接近的可表示值的規則將無窮大當做它在有限值末尾的正常位置,因此,任何大於或等於Number.MAX_VALUE
加上超出一半的“步長”會四舍五入為無窮大。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.