當我運行下面發佈的程序時,我得到了一些奇怪的結果。浮點變量不工作
該程序假設打印消息的倍數爲i = 5,000,000,但是,當我不等於500萬的倍數時,它有時會打印消息。
當我將numberOfTests從5000萬更改爲500萬時,程序運行良好。另外,如果我將它從float更改爲double,則該程序也可以正常工作。
我現在的代碼有什麼問題?浮動變量不工作?這是爲什麼發生?我今後如何防止這種情況發生?
public static void main(String[] args)
{
final int numberOfTests = 50 * 1000 * 1000;
final float IncrementsPercentageToPrintResults = .10f;
for(int i = 1; i <= numberOfTests; i++)
{
if(i % (IncrementsPercentageToPrintResults * numberOfTests) == 0)
{
System.out.println("Currently at " + (int) (((float) i/numberOfTests) * 100) + "%.");
System.out.println(" i = " + i);
}
}
}
Output:
Currently at 10%.
i = 5000000
Currently at 20%.
i = 10000000
Currently at 30%.
i = 15000000
Currently at 40%.
i = 19999999
Currently at 40%.
i = 20000000
Currently at 40%.
i = 20000001
Currently at 50%.
i = 24999999
Currently at 50%.
i = 25000000
Currently at 50%.
i = 25000001
Currently at 60%.
i = 29999999
Currently at 60%.
i = 30000000
Currently at 60%.
i = 30000001
Currently at 70%.
i = 34999998
Currently at 70%.
i = 34999999
Currently at 70%.
i = 35000000
Currently at 70%.
i = 35000001
Currently at 70%.
i = 35000002
Currently at 80%.
i = 39999998
Currently at 80%.
i = 39999999
Currently at 80%.
i = 40000000
Currently at 80%.
i = 40000001
Currently at 80%.
i = 40000002
Currently at 90%.
i = 44999998
Currently at 90%.
i = 44999999
Currently at 90%.
i = 45000000
Currently at 90%.
i = 45000001
Currently at 90%.
i = 45000002
Currently at 100%.
i = 49999998
Currently at 100%.
i = 49999999
Currently at 100%.
i = 50000000
我認爲[這個鏈接](http://www.youtube.com/watch?v=PZRI1IfStY0&list= UU9-y-6csu5WGm29I7JiwpnA&feature = share&index = 7)將揭示這個問題。 – Makoto
這有助於很多!謝謝 – Programmer
可能重複的[是浮點數學破碎?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –