回答
這種表達應該始終評估爲true
,有幾個注意事項:
- 而分子不超過2^52;否則他們會失去精確度。
- 分母不超過雙精度提供的範圍。
- 您必須在使用基數2浮點(基本上所有現代機器)的平臺上工作。
爲什麼分母不能太大,你能完成請 – Guillaume07 2011-06-05 21:56:23
我已編輯。 – Guillaume07 2011-06-05 21:59:07
@ Guillaume07:在這種情況下,它非常大(或者實際上非常小),它們超出了雙精度範圍。可能不會成爲你的關心!另一個要考慮的是分子是否會超過2^52(否則他們會失去精度)。 – 2011-06-05 22:02:58
通常,浮點相等比較的工作原理不取決於值,而是取決於數值。
例如
double v = 4/3.0; // inexact
double old_v = v;
some_func_that_might_change_its_argument(&v);
if (v == old_v) { ... }
可能,儘管不精確的價值很好地工作,而:
double v = 0;
for(int i = 0; i < 5; ++i) v += 0.1;
if (v == 0.5) { ... }
可能分母是一個失敗,即使不等式的兩邊可以表示爲一個簡單的有理數2.
恰好如此,第二個例子確實導致了平等。 – 2011-06-05 22:08:26
@Oli:在哪個系統上?該標準不允許。並且,例如,[這個微小的變化](http://ideone.com/ZbHhf)不會。 – 2011-06-05 22:40:17
我同意不能保證他們是平等的。但在IEEE-754(雙倍或單一)中,總和確實爲0.5。 – 2011-06-05 22:49:05
功率我無法引用任何說,這是保證,但在邏輯上它應該工作,因爲所有IEE754浮點數表示爲M * 2^E,其中M和E都是整數(和可能是負面的)。
因此,3/4.0
和6/8.0
都是正好是等於3 * 2^-2並且可以用IEE754格式完全表示。
此外,鑑於:
% cat test.cc
double three_quarters = 3/4.0;
double six_eighths = 6/8.0;
我們得到:
% c++ -S test.cc
% cat test.s
.globl _three_quarters
.data
.align 3
_three_quarters:
.long 0
.long 1072168960
.globl _six_eighths
.align 3
_six_eighths:
.long 0
.long 1072168960
這都說明兩個表達式已經減少(由編譯器),以相同的恆定值。
儘管C++並沒有強制要求IEEE754進行浮動和雙精度處理;) – fredoverflow 2011-06-06 08:56:13
沒有要求C++實現使用IEEE 754浮點(或類似)。但如果你的確如此,這應該可以正常工作。
- 1. 比較兩個字符串的百分比:如果$的$ B
- 2. 比較兩個分數(<和朋友)
- 3. 問題與比較兩個分數
- 4. 比較兩個陣列具有非常分散的值
- 5. 如何部分比較兩個圖
- 6. 我收到錯誤的結果比較兩個字母
- 7. Python的比較兩個文件部分
- 8. 比較兩個(2)日期
- 9. 比較兩個HTML塊,如果它具有相同的內容
- 10. 比較兩個數組,如果有相同的值分配給他們變量
- 11. 兩次CGRect比較的百分比
- 12. iOS的分配工具:比較兩個快照的內存
- 13. 設置分析比較兩個字段
- 14. Git:我們可以比較兩個相同文件的分步版本嗎?
- 15. 比較兩個fxcop結果
- 16. 的jQuery:兩個數字的百分比(第2部分)
- 17. 兩個函數的比較結果
- 18. 比較兩個字符串以獲得唯一性百分比
- 19. VB.NET - 比較兩個字母的代碼
- 20. 我如何比較兩個數組php
- 21. 我如何比較兩個數組?
- 22. ROC可以比較兩組功能的分類能力嗎?
- 23. 是否有比較/比較兩個Java包的體面工具?
- 24. 你可以比較兩個DT_R8值嗎?
- 25. 是否可以比較兩個遊標?
- 26. 我如何可以比較兩個NSTimeInterval類型的對象
- 27. 如何將訪問者分成兩個介紹頁面,以比較每位訪問者的註冊人數?
- 28. 分析漏斗,跟蹤具有不同參數的兩個URL,兩者都被觸發爲相同的URL。
- 29. 如何比較python中的兩個百分比?
- 30. 如何比較的百分比計算兩個字符串
你爲什麼不試試自己? – Saphrosit 2011-06-05 21:53:29
@Saphrosit:因爲我想確認和建議/評論 – Guillaume07 2011-06-05 21:55:07
@Saphrosit:浮點錯誤非常複雜,依賴測試隨機值是一個很好的方法來得出錯誤的結論。 – 2011-06-05 21:57:19