2011-06-07 10 views
10

मुझे अपने प्रोजेक्ट के लिए यह त्रुटि आ रही है, जिसमें डिजिटल ऑडियो सिग्नल के साथ काम करना शामिल है।सी # शॉर्ट त्रुटि: दो जुड़वां पूरक संख्या के न्यूनतम मान को नकारात्मक करना

तो मुझे आयाम मान मिल रहे हैं और हाल ही में इस त्रुटि का सामना करना पड़ा। ऐसा तब होता है जब आयाम मान का सामना करना पड़ता है "-32768" डिबगिंग पर। मैं मानों को एक छोटी [] सरणी में संग्रहीत कर रहा हूं।

मेरे पास एक झुकाव है कि इसमें अधिकतम/न्यूनतम मानों के साथ कुछ करना है (मैं Math.Abs ​​का उपयोग करता हूं) लेकिन मुझे यह सुनिश्चित करने के बारे में अनिश्चितता है कि इसे कैसे संभाला जाए।

क्या कोई मदद कर सकता है? धन्यवाद!

+0

कृपया हमें कुछ कोड दिखाएं? – Nik

+0

क्या यह मूल्य एक नियमित मूल्य या कुछ असाधारण स्थिति का संकेत है जिसे आपको अलग से संभालने की आवश्यकता है? –

+0

हाय! यह सिर्फ एक नियमित मूल्य है। मैंने इसे थ्रेसहोल्डिंग फ़ंक्शन का उपयोग करके संभाला ताकि धन्यवाद! – user488792

उत्तर

17

16 बिट हस्ताक्षरित int (short) -32,768 और 32,767 के बीच मान लेता है।

नेगेटिंग -32768, या पूर्ण मूल्य प्राप्त करना, 16 बिट हस्ताक्षरित पूर्णांक के अंदर करना असंभव है। मान (32,768) अधिकतम संभव सकारात्मक मूल्य (32,767) से अधिक है।

मैं आपको सलाह देना चाहूंगा कि आप जिस एल्गोरिदम का उपयोग कर रहे हैं उसके बारे में अधिक जानकारी के बिना समस्या का समाधान कैसे करें।

6

-32768 का पूर्ण मूल्य +32768 है ... लेकिन यह short की सीमा से बाहर है ... इसलिए त्रुटि।

  • इस विशेष-केस:

    विकल्प (आप भाग्यशाली आप कुछ बहुत अजीब परिणाम के लिए अग्रणी एक अपवाद ... इस विषमता का सामना कर चुप अतिप्रवाह दे सकते हैं करने के अन्य तरीकों के रूप में इस को देख रहे हैं, कर रहे हैं) मूल्य, उदाहरण के लिए पहले -32767 में बदलने का है, अगर सही मूल्य नहीं बात Math.Abs

4

क्या मूल्य आप के लिए होता है यह हो कॉल करने से पहले बहुत ज्यादा

  • एक int करने के लिए इसे कन्वर्ट करता है? short में 32768 कोई नहीं है - केवल 32767

    आप अपनी खुद की विधि लिख सकता है निश्चित रूप से:

    public static short LossyAbs(short value) 
    { 
        if(value >= 0) return value; 
        if(value == short.MinValue) return short.MaxValue; 
        return -value; 
    } 
    

    लेकिन इस में यह तरह-के एक मूल्य खो देता है कि हानिपूर्ण है। शायद एक बेहतर विचार यह है कि यदि आप (संभावित रूप से) इसे अस्वीकार करना चाहते हैं तो short.MinValue का उपयोग न करें। अपने आप को -32767 तक सीमित करने से यह दूर हो जाएगा।

  • 1

    लघु [] सरणी int [] सरणी में कनवर्ट करें।

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