對於舍入到最近的浮點算術,我有點困惑。令a,b和c爲標準化的雙精度浮點數。 a + b = b + a其中+正確舍入到最接近的浮點加法是真的嗎?我最初的猜測是肯定的,這總是如此,但我並不完全理解到最近的四捨五入。有人可以給出一個例子,當a + b!= b + a使用浮點加法並舍入到最近?對最接近的浮點算術舍入
2
A
回答
3
無論舍入模式如何,正確實施IEEE-754浮點加法都是可交換的(a + b等於b + a)。
舍入模式會影響精確的數學結果是如何舍入以適合目標格式的。由於a + b和b + a的確切數學結果是相同的,所以它們是相同的。
0
如上所述,加法是可交換的,但不是聯想的。在舍入模式的差異可以通過運行下面的(MS的Visual Studio)C++代碼可以看出:
#include <iostream>
#include <float.h>
#pragma fenv_access(on)
using namespace std;
int main(int argc, char* argv[])
{
float a = 1.75f, b = 1e-6f;
cout.setf(ios::fixed,ios::floatfield);
cout.precision(7);
cout << "a = " << a << ", b = " << b << endl;
_controlfp_s(NULL, _RC_DOWN,_MCW_RC);
cout << "Result of a + b rounded down: " << a+b << endl;
cout << "Result of a - b rounded down: " << a-b << endl;
_controlfp_s(NULL, _RC_UP,_MCW_RC);
cout << "Result of a + b rounded up: " << a+b << endl;
cout << "Result of a - b rounded up: " << a-b << endl;
_controlfp_s(NULL, _RC_NEAR,_MCW_RC);
cout << "Result of a + b rounded to nearest: " << a+b << endl;
cout << "Result of a - b rounded to nearest: " << a-b << endl;
return 0;
}
輸出:
a = 1.7500000, b = 0.0000010
Result of a + b rounded down: 1.7500010
Result of a - b rounded down: 1.7499989
Result of a + b rounded up: 1.7500011
Result of a - b rounded up: 1.7499990
Result of a + b rounded to nearest: 1.7500010
Result of a - b rounded to nearest: 1.7499990
相關問題
- 1. 舍入浮法至最接近0.5
- 2. 將雙精度舍入到最接近的算術級數?
- 3. 將浮點數舍入到ruby中最接近的整數
- 4. 將浮點數舍入到最接近的因子?
- 5. 如何將浮點四捨五入到最接近的.001
- 6. 將四捨五入的浮點數湊整到最接近的0.05
- 7. 在目標C/Cocoa Touch中向下舍入到最接近的0.5浮點數
- 8. 最接近點對的變化算法
- 9. 舍入到最接近的100
- 10. 計算一個值並舍入到最接近的整數
- 11. Python舍入隨機浮點數到2D均勻網格上的最近點
- 12. 四捨五入到最接近
- 13. 浮點值的舍入
- 14. Python的浮點舍入
- 15. 浮點數 - 最接近1.7的數字
- 16. 的javascript:舍入上浮至最近的1.25(或任何...)
- 17. 浮點舍入檢測
- 18. 下一輪浮點舍入
- 19. 將我的小數點浮點數舍入到最接近的一半或整數?
- 20. JavaScript舍入到最接近的2位小數(然而5舍入)
- 21. 最近的一對點算法
- 22. 最近的一對點算法變化
- 23. 四捨五入到最近的年份
- 24. 四捨五入/關最近的5
- 25. 在預先確定的列表中將浮點數舍入到最接近的值?
- 26. 如何解決C++中浮點運算的舍入問題?
- 27. 浮法算術
- 28. 如何將一個浮點數四捨五入到最接近的四分之一
- 29. 你會如何在Swift 3中將浮點值向上或向下舍入到最接近的偶數整數?
- 30. Ruby中的舍入浮點數
我明白了。它是否也是聯想?例如,(a + b)+ c = a +(b + c)? – SKLAK 2013-02-19 17:53:16
@SKLAK:不容易反例:'a = 1e16,b = -1e16,c = 1'。 – 2013-02-19 18:08:02
算術不關聯,因爲在發生舍入錯誤時更改操作的順序會發生變化。例如,計算的「(a + b)+ c」和「a +(b + c)」在數學上是f(f(a + b)+ c)'和'f(a + f(b + c)) ',其中'f'是將精確的數學值舍入爲浮點數值的函數。 f(a + b)'與f(b + c)'具有相同的舍入誤差通常沒有理由,所以這些可能會產生不同的結果。 – 2013-02-19 18:51:47