एकमात्र नुकसान मैं सोच सकता हूं कि बड़ी संख्या के साथ काम करते समय जो चुकता हो जाएगा।
उदाहरण के लिए, जावा में:
int x = Integer.MAX_VALUE / 1000000; //2147
int y = Integer.MAX_VALUE / 5000; //429496
System.out.println("x < y: " + (x < y)); //true
System.out.println("x*x: " + (x * x)); //4609609
System.out.println("y*y: " + (y * y)); //-216779712 - overflows!
System.out.println("x*x < y*y: " + (x * x < y * y)); //false - incorrect result due to overflow!
यह भी ध्यान देने योग्य है कि क्या होता है जब आप Math.pow () का उपयोग ठीक उसी संख्याओं के साथ करते हैं और डबल से इंट टू बैक कास्ट करते हैं Math.pow()
:
System.out.println("x^2: " + (int) (Math.pow(x, 2))); //4609609
System.out.println("y^2: " + (int) (Math.pow(y, 2))); //2147483647 - double to int conversion clamps to Integer.MAX_VALUE
System.out.println("x^2 < y^2: " + ((int) (Math.pow(x, 2)) < (int) (Math.pow(y, 2)))); //true - but for the wrong reason!
क्या यह काम कर रहा है? नहीं , इसने केवल सही उत्तर दिया है क्योंकि इससे y*y
जुड़ा हुआ है Integer.MAX_VALUE
, और x*x
इससे कम है Integer.MAX_VALUE
। अगर इस x*x
पर भी नकेल कसी गई Integer.MAX_VALUE
तो आपको गलत जवाब मिलेगा।
इसी तरह के सिद्धांत फ़्लोट्स और डबल्स के साथ भी लागू होते हैं (सिवाय इसके कि वे ओवरफ्लो होने से पहले स्पष्ट रूप से एक बड़ी रेंज है) और कोई भी अन्य भाषा जो चुपचाप ओवरफ्लो की अनुमति देती है।