2012-04-02 12 views
7

जावा में, मुझे पता है कि अंकगणितीय गणना के परिणाम का डेटा प्रकार गणना में शामिल संख्याओं के डेटा प्रकारों पर निर्भर करता है। उदाहरण के लिए,जावा अंकगणितीय गणना के डेटा प्रकार के परिणाम

  1. पूर्णांक + पूर्णांक = पूर्णांक

  2. लंबे/डबल = डबल

एक। लेकिन मुझे कोई संदर्भ नहीं मिल रहा है जो मुझे इन सभी नियमों को दे सकता है। क्या कोई मेरी मदद कर सकता है?

बी। अंकगणितीय गणना में प्रवाह से कैसे बचें? उदाहरण के लिए, 2 लंबे समय के परिणाम अब लंबे समय तक फिट नहीं हो सकते हैं ...

बहुत बहुत धन्यवाद।

उत्तर

3

ए। इन नियमों को संख्यात्मक पदोन्नति नियम कहा जाता है और Java Language Specification

बी में निर्दिष्ट हैं। ओवरफ्लो से निपटने के लिए दो आम तौर पर स्वीकृत विधि हैं।

पहली विधि, एक पोस्ट-चेक, जहां आप एक ऑपरेशन करते हैं, अतिरिक्त कहते हैं और फिर जांचें कि परिणाम किसी भी ऑपरेंड से अधिक है। उदाहरण के लिए:

int c = a + b; 

if(c<a) { // assuming a>=0 and b>=0 
    // overflow happened 
} 

दूसरी विधि, एक पूर्व जांच, जहां मूल रूप से पहले स्थान पर होने से अतिप्रवाह से बचने की कोशिश है। उदाहरण:

if(a > Integer.MAX_INTERGER - b) { 
    // overflow happened 
} 
+2

आपकी पहली जांच हमेशा मान्य नहीं है। यदि बी ऋणात्मक है, तो 'सी <ए' अतिप्रवाह के बिना सच होगा। –

+0

यह सच है। मैं इसे उदाहरण में जोड़ दूंगा। लेकिन मैं सिर्फ मूर्खतापूर्ण समाधान नहीं दे रहा हूं, दृष्टिकोण को चित्रित कर रहा हूं। –

+0

हां, मुझे पता है कि यह एक पूर्ण समाधान नहीं है। मैं बस यह इंगित करना चाहता था कि पोस्टर ने इसे वर्बैटिम के रूप में नहीं लिया। –

2

जावा नियम विशिष्टता का विशिष्ट खंड जो इन नियमों से संबंधित है section 4 है।

यदि आप मूल्यों को अतिप्रवाह नहीं करना चाहते हैं, तो BigInteger या कुछ अन्य मनमाना-परिशुद्धता अंकगणितीय प्रकार का उपयोग करें।

सामान्य मामले में अतिप्रवाह से बचने के लिए, Guava (जो मैं करने के लिए योगदान) IntMath.checkedAdd(int, int) और LongMath.checkedMultiply(long, long) तरह के तरीकों, जो अतिप्रवाह पर अपवाद फेंक देता है। (उनमें से कुछ स्वयं को लागू करने के लिए अनिवार्य हैं, लेकिन ये सभी बहुत का परीक्षण किया गया है।) आप यह देखने के लिए स्रोत देख सकते हैं कि वे कैसे काम करते हैं, लेकिन उनमें से अधिकतर प्रभावशाली ओवरफ्लो की जांच करने के लिए सुंदर बिट-ट्विडलिंग चाल पर भरोसा करते हैं।

0

जब किसी ऑपरेशन में दो प्रकार शामिल होते हैं, तो छोटे प्रकार को बड़े प्रकार में परिवर्तित किया जाता है।

यहाँ विवरण देखें: http://mathbits.com/MathBits/Java/DataBasics/Mathoperators.htm

1

किसी भी दो आदिम पूर्णांक ऑपरेंड पर अंकगणितीय संचालन का परिणाम कम से कम एक पूर्णांक हो जाएगा - भले ही ऑपरेंड बाइट्स और कम कर रहे हैं।

संबंधित मुद्दे