回答
它取決於舍入模式。這是一個簡單的例子。假設我們的精度是4位,並且我們有某種IEEE754表示。因此,值1存儲爲1.0000 × 。下一個較大數是1.0001 × ,並且機器的ε-&小量;被定義爲兩者之間的差別,這是0.0001 × = 1.0000 × 。現在:
ε / = 1.0000 × = 0.00001,和
&小量; / = 1.0000 × = 0.000001。
當添加兩到1的一個,數量也第一重寫功率2 和舍入到分離器後4個數字。 e倖存的尾數 / 4肯定是0.0000,而倖存的尾數爲ε。 / 2是0.0000或0.0001,取決於您向上還是向下四捨五入。
只要有效所得尾數是0.0000,則可以將號碼添加到1而不改變其值。
(實際的精度是23 + 1,52 + 1和64爲單,雙和擴展雙精度浮點數)。
如果要 「比FLT_EPSILON較小的最大數」:
x = nextafterf(FLT_EPSILON, 0)
如果您想要最大號碼x
這樣1.0f + x == 1.0f
,那麼答案取決於舍入模式,但是在默認舍入模式下,它僅僅是FLT_EPSILON/2
。
但是,事情並不那麼簡單。由於舍入到最近幾輪的甚至的鄰居關係,你有1.0f + FLT_EPSILON/2 == 1.0f
,但方式:
(1.0f+FLT_EPSILON) + FLT_EPSILON/2 != (1.0f+FLT_EPSILON)
所以,你可能反而要使用的x
略小值:
x = nextafterf(FLT_EPSILON/2, 0)
這將確保y+x == y
任何y >= 1.0
。
該問題使用FLT_EPSILON的非正式和錯誤定義作爲可以添加到1.0f以獲得非1.0f值的最小浮點數。正確的定義是1.0f和1.0f的繼承者之間的區別。對於這個正確的定義,候選'nextafterf(FLT_EPSILON,0)'不具有1.0f +候選== 1.0f的屬性。這不是你的錯,而是問題。 – 2013-05-09 07:54:15
是的,我現在看到問題不一致。我回答了主題,但沒有給出正確答案。 – 2013-05-09 14:13:13
並更新了答案以反映這兩個問題。 – 2013-05-09 14:17:56
- 1. 什麼是Resourcestring最大大小和最大數量限制?
- 2. 什麼是coinbase的大小和數量?
- 3. 什麼是最大的SQL表大小
- 4. 確定GLSL中最小/最大矢量的邏輯是什麼?
- 5. 什麼是MySQL的最佳varchar大小?
- 6. 爲什麼ArrayList的最大數組大小是Integer.MAX_VALUE - 8?
- 7. 什麼是存儲數據的最大大小
- 8. 什麼是縮小大量文本的最佳方式?
- 9. 什麼是teradata上傳的最佳批量大小
- 10. 在Java中創建最大線程的因素是什麼,堆大小與最大線程數成反比?
- 11. 什麼是最低VM預算大小?
- 12. 是.htacess大小減少網站的性能?什麼是.htacess的最大大小?
- 13. t-sql:什麼是最好的方法來比較小數
- 14. 比較小數的最佳方法是什麼?
- 15. 對大量數據進行每對比運算的最佳方法是什麼?
- 16. 獲得迭代器的數量/長度/大小的最佳方式是什麼?
- 17. 什麼是功能不能超過的最大參數數量
- 18. 爲什麼Firefox上的最小高度比高度大?
- 19. 什麼是通過DSL發送數據的最佳塊大小
- 20. 什麼是MySQL查詢的最佳數據包(查詢)大小?
- 21. 什麼是Azure VM中MSSQL Server的磁盤的最大大小?
- 22. 什麼是ios中的sqlite的最大大小限制
- 23. 爲什麼Java堆的最大大小是固定的?
- 24. 什麼是MySQL表的最大行數
- 25. 數組的大小和指針的大小是什麼意思?
- 26. 什麼是大查詢最大行大小?
- 27. 什麼是mySQL的最大數量的sql結構?
- 28. 什麼RSA最大塊大小編碼?
- 29. 什麼可以是我可以擁有的最大「POST」大小?
- 30. 什麼是mysql的最大查詢大小?
'EPS/2'應該做的伎倆。 – 2012-01-31 01:16:07
@KerrekSB EPS/2可能滿足條件,但它不一定是最大的 – TJD 2012-01-31 01:20:08