对于舍入到最近的浮点算术,我有点困惑。令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. 如何将浮点四舍五入到最接近的.001
- 4. 将浮点数舍入到最接近的因子?
- 5. 将浮点数舍入到ruby中最接近的整数
- 6. IEEE 754的浮点舍入到最接近
- 7. 将浮点数舍去到最接近的0.5蟒蛇
- 8. 将四舍五入的浮点数凑整到最接近的0.05
- 9. 如何在Jquery中将浮点值四舍五入为最接近的整数
- 10. 在目标C/Cocoa Touch中向下舍入到最接近的0.5浮点数
- 11. 最接近点对的变化算法
- 12. 舍入到最接近的X
- 13. 舍入到最接近的整数PHP
- 14. 舍入到最接近的多个
- 15. 舍入到最接近的100
- 16. 计算最近的浮点值
- 17. 浮点计算和四舍五入
- 18. 计算一个值并舍入到最接近的整数
- 19. 最小浮点数(最接近零)
- 20. 舍入算术表达式
- 21. 舍入最接近(1,1.5,2,2.5等..)javascript
- 22. 四舍五入到最接近
- 23. Python舍入随机浮点数到2D均匀网格上的最近点
- 24. 浮点数 - 最接近1.7的数字
- 25. Python的浮点舍入
- 26. 浮点值的舍入
- 27. 的javascript:舍入上浮至最近的1.25(或任何...)
- 28. 舍入到最接近的一半(不是最接近的整数)
- 29. 下一轮浮点舍入
- 30. 舍入浮点程序
我明白了。它是否也是联想?例如,(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