Я искал бесконечные циклы, чтобы проверить какой-то другой код/мое понимание, и наткнулся на это странное поведение. В приведенной ниже программе подсчет от 0 до 2^24 принимает < 100 мс на моей машине, но при подсчете до 2^25 на порядок больше времени (на момент написания, он все еще выполняется).Почему подсчет до 2^24 выполняется быстро, но подсчет до 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;
}
}
}
}
Вы пробовали просто запустить addFloats ((float) Math.pow (2.0, 25.0)) ;? –
Потому что в какой-то момент f + 1.0 == f. –
@OlegEstekhin Ahh, вот и все. Я идиот. Благодаря! –