मैंने पाउ (एक्सपोनेंट) विधि पर कुछ परीक्षण किए। दुर्भाग्यवश, मेरे गणित कौशल निम्नलिखित समस्या को संभालने के लिए पर्याप्त मजबूत नहीं हैं।java.math.BigInteger पाउ (एक्सपोनेंट) प्रश्न
BigInteger.valueOf(2).pow(var);
परिणाम:: |
- वर
मैं इस कोड का उपयोग कर रहा एमएस
- 2000000 में समय |
- 2500000 |
- 3000000 | 2237 9
- 3500000 | 32147
- 4000000 |
- 4500000 |
- 5000000 | 49 9 22
देखें? 2,500,000 एक्सपोनेंट की गणना लगभग 2,000,000 जितनी तेजी से की जाती है। 4,500,000 की गणना 4,000,000 से अधिक तेजी से की जाती है।
वह क्यों है?
आप कुछ मदद देने के लिए, यहाँ BigInteger.pow (प्रतिपादक) के मूल कार्यान्वयन है:
public BigInteger pow(int exponent) {
if (exponent < 0)
throw new ArithmeticException("Negative exponent");
if (signum==0)
return (exponent==0 ? ONE : this);
// Perform exponentiation using repeated squaring trick
int newSign = (signum<0 && (exponent&1)==1 ? -1 : 1);
int[] baseToPow2 = this.mag;
int[] result = {1};
while (exponent != 0) {
if ((exponent & 1)==1) {
result = multiplyToLen(result, result.length,
baseToPow2, baseToPow2.length, null);
result = trustedStripLeadingZeroInts(result);
}
if ((exponent >>>= 1) != 0) {
baseToPow2 = squareToLen(baseToPow2, baseToPow2.length, null);
baseToPow2 = trustedStripLeadingZeroInts(baseToPow2);
}
}
return new BigInteger(result, newSign);
}
सटीक शक्तियां हैं आप उन कॉल में से प्रत्येक के एक लाख रन क्या किया और परिणाम औसत प्राप्त करने के लिए आपके द्वारा प्रदान की गई टेबल? – vicatcu
आप समय से कितने रन औसत कर रहे हैं? –
@ vicatcu: मुझे लगता है कि यह मानना सुरक्षित है कि उसने परिणाम प्राप्त करने के लिए 3 साल तक इंतजार नहीं किया था। –