Błąkałem się, robiąc nieskończone pętle, aby przetestować inny kod/moje zrozumienie, i natknąłem się na dziwne zachowanie. W poniższym programie, liczenie od 0 do 2^24 trwa < 100ms na moim komputerze, ale liczenie do 2^25 zajmuje więcej rzędów wielkości (w momencie pisania, to wciąż jest wykonywane).Dlaczego liczenie do 2^24 wykonuje się szybko, ale liczenie do 2^25 trwa znacznie dłużej?
Dlaczego tak się dzieje?
To było pod Java 1.8.0_101, na kopii 64-bitowego systemu 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;
}
}
}
}
Czy próbowałeś już po prostu uruchamianie addFloats ((float) Math.pow (2.0, 25.0))? –
Ponieważ w pewnym momencie f + 1.0 == f. –
@OlegEstekhin Ahh, to będzie koniec. Jestem idiotą. Dzięki! –