我注意到两天前我有一些奇怪的奇怪问题,当我在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。
答案 0 :(得分:0)
如果您使用浮点数或双打,则总是存在一定程度的不确定性,因为它们的数字范围不是连续的。对于绝对精度,必须使用BigDecimals执行计算。
答案 1 :(得分:-1)
只需使用BigDecimal类来计算结果。这是对的。