मैं कुछ अन्य कोड/मेरी समझ का परीक्षण करने के लिए अनंत लूप बनाने के आसपास झुका रहा था, और इस अजीब व्यवहार में आया। नीचे दिए गए कार्यक्रम में, 0 से 2^24 तक की गिनती < मेरी मशीन पर 100ms लेती है, लेकिन 2^25 की गिनती अधिक समय के आदेश (लेखन के समय, यह अभी भी निष्पादित हो रही है) लेती है।2^24 को गिनती क्यों जल्दी से निष्पादित करती है, लेकिन 2^25 की गिनती बहुत अधिक समय लेती है?
ऐसा क्यों है?
यह जावा 1.8.0_101 के तहत किया गया, विंडोज 10
की एक 64-बिट प्रति पर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)) चलाने की कोशिश की है ?? –
क्योंकि कुछ पल में एफ + 1.0 == एफ। –
@ ओलेगस्टेखिन आह, यह होगा। मैं बेवकूफ़ हूँ। धन्यवाद! –