When I run the program posted below, I get some weird results.
The program is suppose to print a message at multiples of when i = 5,000,000, however, it sometimes prints the message when i is not equal to a multiple of 5 million.
When I change the numberOfTests from 50 million to 5 million, the program runs fine. Also, if I change it from a float to a double, the program works fine as well.
What's wrong with my current code? Is the floating variable not working? Why is this happening? How can I prevent this in the future?
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