所以我有一个计算,其中两个浮点数是向量对象的组成部分被减去,然后似乎返回不正确的结果.
我试图使用的代码是:
cout << xresult.x << " " << vec1.x << endl;
float xpart1 = xresult.x - vec1.x;
cout << xpart1 << endl;
Run Code Online (Sandbox Code Playgroud)
运行此代码的地方将返回
16 17
-1.00002
Run Code Online (Sandbox Code Playgroud)
如您所见,打印出xresult.x和vec1.x的值分别告诉您它们分别是16和17,但减法操作似乎引入了错误.
有什么想法吗?
这称为浮点运算。这就是为什么数字代码如此“棘手”并且充满陷阱。这个结果是预料之中的。更重要的是,它可能取决于您正在使用的处理器,您将看到它的内容和程度。
我想补充一点,浮点变量的每种类型的变量:float、double、long double 都有不同的精度因子。也就是说,人们可能更能够更准确地表示浮点数的值。这些数字在内存中的存储方式就证明了这一点。
当您查看浮点数时,它包含的有效数字比双精度数或长双精度数要少。因此,当您对它们执行数值计算时,您必须预期浮点数会遭受更大的舍入误差。在处理财务数据时,开发人员经常使用某种类似的“小数”。这些设计得更好,能够以更好的有效数字精度处理货币类型操作。然而它是有代价的。
查看IEEE 745-2008规范。
| 归档时间: |
|
| 查看次数: |
9894 次 |
| 最近记录: |