तो इंटेलिज आईडीईए में ग्रोवी का उपयोग करके, मुझे निम्न कोड का उपयोग करके अपवाद मिलता है:

def t = (100000G**100000000000G)

अब मुझे पता है कि ये ऐसी संख्याएँ हैं जिनकी गणना कोई भी समझदार इंसान कभी नहीं करना चाहेगा, लेकिन पूछने के उद्देश्य से और मेरी जिज्ञासा के कारण, यह निम्नलिखित अपवाद क्यों फेंकता है?

Exception in thread "main" java.lang.NumberFormatException
at java.math.BigDecimal.<init>(BigDecimal.java:494)
at java.math.BigDecimal.<init>(BigDecimal.java:383)
at java.math.BigDecimal.<init>(BigDecimal.java:806)
at java.math.BigDecimal.valueOf(BigDecimal.java:1274)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.power(DefaultGroovyMethods.java:14303)
at org.codehaus.groovy.runtime.dgm$489.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:274)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
at dev.folling.code.Main.main(Main.groovy:11)

** को .power() से बदलने से इसके बारे में कुछ भी नहीं बदलता है। त्रुटि स्पष्ट रूप से किसी बिंदु पर दिखाई देने वाले अवैध चरित्र के कारण होती है। मुझे संदेह है कि यह एक स्मृति त्रुटि हो सकती है, हालांकि मुझे यकीन नहीं है।

0
Folling 25 जून 2018, 00:06

1 उत्तर

सबसे बढ़िया उत्तर

आप अपने कोड के लिए एक विराम बिंदु बनाने का प्रयास कर सकते हैं, और उसमें खुदाई करने का प्रयास कर सकते हैं।

हुड के नीचे यही होगा।

public static BigInteger power(BigInteger self, BigInteger exponent) {
    return exponent.signum() >= 0 && exponent.compareTo(BI_INT_MAX) <= 0?self.pow(exponent.intValue()):BigDecimal.valueOf(Math.pow(self.doubleValue(), exponent.doubleValue())).toBigInteger();
}

चल रही प्रक्रिया के अंदर, इसे निम्नलिखित कोड के साथ वापसी के रूप में "इन्फिनिटी" वापस मिलता है:

Math.pow(self.doubleValue(), exponent.doubleValue())

फिर BigDecimal valueof का उपयोग करके इसे BigInteger में बदल देगा

BigDecimal.valueOf("Infinity")

यही कारण है कि आपको एक NumberFormatException मिलेगा

NS,

टिम

2
Tim 25 जून 2018, 00:41