Java,添加错误

时间:2015-03-09 09:33:02

标签: java runtime-error addition

我注意到两天前我有一些奇怪的奇怪问题,当我在z轴上有180°而在x上有1°时,我的lib将mat4(矩阵4x4,行主要顺序)转换为quat(四元数),所有其他值工作正常,即180°和2°或179°和1°等等。

经过深度调试后,我发现了问题

    double trace = 0, s, x, y, z, w;

    trace = m.c0.x + m.c1.y + m.c2.z + 1;

这应该返回trace = 0,给定

m.c0.x -1.0
m.c1.y -0.9998477
m.c2.z 0.9998477
trace 5.9604644775390625E-8

但它没有...为什么?

我通过计算跟踪找到了一个临时解决方案:

    trace += m.c0.x;
    trace += m.c1.y;
    trace += m.c2.z;
    trace += 1;

无论如何,我想知道将来采取相应行动的原因

Ps:我试图将它转换为双倍,之前它们是浮动的,但没有任何改变。 Here完整代码

规格:Win7 x64上的Java 7 x64。

2 个答案:

答案 0 :(得分:0)

如果您使用浮点数或双打,则总是存在一定程度的不确定性,因为它们的数字范围不是连续的。对于绝对精度,必须使用BigDecimals执行计算。

答案 1 :(得分:-1)

只需使用BigDecimal类来计算结果。这是对的。