Я возился вокруг создания бесконечных циклов, чтобы проверить другой код/мое понимание, и наткнулся на это странное поведение. В приведенной ниже программе подсчет от 0 до 2 ^ 24 занимает 100 мс на моей машине, но учет до 2 ^ 25 занимает на порядок больше времени (на момент написания, он все еще выполняется).
Почему это так?
Это было в Java 1.8.0_101, на 64-битной копии Windows 10.
TestClass.java
public class TestClass {
public static void main(String[] args) {
addFloats((float) Math.pow(2.0, 24.0));
addFloats((float) Math.pow(2.0, 25.0));
}
private static void addFloats(float number) {
float f = 0.0f;
long startTime = System.currentTimeMillis();
while(true) {
f += 1.0f;
if (f >= number) {
System.out.println(f);
System.out.println(number + " took " + (System.currentTimeMillis() - startTime) + " msecs");
break;
}
}
}
}