如果float只包含整数值,我们可以保证比较float和==是否安全?

时间:2016-04-13 04:07:18

标签: java android floating-point comparison precision

我有一些for循环需要一些浮点局部变量:

float price=0;
float weight=0;
int[] amountArray={2,5,3};
for(int i=0;i<=10;i++){
    int amount=0;
    if(i<amountArray.length){
        amount=amountArray[i];
    }
    //other codes for price and weight
}

我希望将价格和权重嵌入for循环作为局部变量,因此我将i从int更改为float:

int[] amountArray={2,5,3};
for(float i=0,price=0,weight=0;i<=10;i++){
    int amount=0;
    if(i<amountArray.length){
        amount=amountArray[(int)i];
    }
    //other codes for price and weight
}

修改后的版本是否与原始版本相同?因为我只包含整数值,可以正确地用IEEE 754标准表示,并且它不依赖于任何硬件(特别是在android中),所以我认为将float与&lt;,&lt; =,==进行比较并转换为int在这种情况下不是问题,我是否正确?

1 个答案:

答案 0 :(得分:2)

这取决于整数的大小。 float尾数有23位,并且总是假设尾数左边的位是1.这意味着任何正整数的值可以适合24位,可以准确表示。但是如果一个整数大于那个,就不会有足够的位数。

要进行演示,请尝试访问http://www.adambeneschan.com/How-Does-Floating-Point-Work/showfloat.php?floatvalue=30000001&floattype=float,这表示如果您尝试将数字30000001表示为float,则实际上其值为30000000.显然== isn&# 39;开始研究那么高的整数。