最近,我在选定的Android设备中遇到了浮点数损坏的问题。我想知道,你们中的任何人遇到过与我类似的问题, 还有办法用简化的代码块重现它吗?
我在Nexus 5设备中遇到了类似的问题。这个问题在Genymotion Emulator中没有发生。
它只发生在选择的循环代码块中,并且在其他代码块中重新生成是非常困难的。
我的情况如下: -
float rectangleWidth2 = 0.0f;
float startX = (float) (left + xPixelsPerUnit * (xValue - minX));
float stopX = startX;
float _left = startX - rectangleWidth2;
float _right = stopX + rectangleWidth2;
// I expect "_left" and "_right" will have same value. However, at this point,
// "_right" will become an arbitary large value, something like 5.3482353354E20
// However, I expect the value range for "_left" and "_right" within [-1000,1000]
如果我将代码更改为
float _left = startX - rectangleWidth2;
float _right = startX + rectangleWidth2;
// "_left" and "_right" will then having same value.
A"可靠"我的情况解决方法是避免使用记者提出的浮动。我尽可能使用double,只在需要时执行必要的浮动铸造。
无论我使用的是Eclipse还是Android Studio,都会出现同样的问题。我本周要去买Nexus 4,看看是否还会出现同样的问题......