आपको अपने एल्गोरिथ्म की संख्यात्मक आवश्यकताओं को जानना होगा और तदनुसार परिशुद्धता का चयन करना होगा।
तो चलो यहाँ गणित करते हैं: एक 32-बिट फ़्लोटिंग पॉइंट में 24 बिट मंटिसा और 8 बिट एक्सपोनेंट है। यह आपको लगभग 1540 डीबी की एक गतिशील रेंज पर शोर अनुपात के बारे में 150 डीबी सिग्नल देता है। यह अधिकांश चीजों के लिए काफी है ऑडियो। दोगुना सटीक आपको लगभग दो बार देता है।
प्रत्येक एल्गोरिथ्म में संख्यात्मक परिशुद्धता के लिए कुछ आवश्यकताएं हैं। यदि सभी ऑडियो एल्गोरिदम को ठीक से डिज़ाइन किया गया है, जो कि मैं 32-बिट फ्लोटिंग पॉइंट के साथ ठीक करने के लिए जानता हूं। "ठीक से डिज़ाइन किया गया" यहां कीवर्ड है। उदाहरण के लिए, ६०-२०० हर्ट्ज से ६४.२ हर्ट्ज पर नमूना ६१-६० बैंड बैंड पास जो द्वितीय IIR द्वि-क्वाड फिल्टर से प्रत्यक्ष के रूप में लागू किया गया है, वास्तव में ३२-बिट पर कुछ शोर की समस्या होगी। हालाँकि यह ट्रांसपोज़्ड फॉर्म II या डायरेक्ट फॉर्म I फ़िल्टर के रूप में पूरी तरह से ठीक है।
यदि आप उदाहरण के लिए Matlab के अवशेष () फ़ंक्शन का उपयोग करके उसी बैंड पास फ़िल्टर के आंशिक अंश विस्तार का प्रयास करते हैं, तो आपको डबल परिशुद्धता के साथ भी खराब परिणाम मिलेंगे। दोबारा उस विशिष्ट इनपुट डेटा के लिए एल्गोरिथ्म की संख्यात्मक आवश्यकताओं से अधिक दोहरी सटीकता की पेशकश करना है। इसे ठीक करने की कुंजी सटीक रूप से आँख बंद करके नहीं है, बल्कि इसके बजाय एक बेहतर एल्गोरिथ्म का उपयोग करना है।
अंत में चलिए एक नज़र डालते हैं कि कौन सी फ्लोटिंग (32 बिट या 64 बिट) कमजोर होती है: आपके पास बहुत अधिक गतिशील रेंज होती है, यानी आप 200dB तक सिग्नल को स्केल कर सकते हैं, 500dB से बढ़ा सकते हैं, फिर से 300dB तक कम कर सकते हैं और आप ठीक उसी तरह से समाप्त कर देंगे जैसे आपने शुरू किया था सटीक में लगभग कोई नुकसान नहीं है। तो यह बात नहीं है। फ्लोटिंग पॉइंट में उन संख्याओं को जोड़ने में परेशानी होती है जो आकार में बहुत भिन्न होती हैं। वहाँ एक बिंदु है जहाँ एक छोटी संख्या को जोड़ने से कोई फर्क नहीं पड़ता है, यानी आपको 1 + dx = 1 मिलता है। यह संख्या "dx" 32-बिट फ्लोटिंग पॉइंट के लिए 1.2e-7 और 64 बिट के लिए 2.2e-16 है। यदि आप एल्गोरिथ्म में उन संख्याओं को जोड़ना या घटाना शामिल है जो उस परिमाण में अलग हैं, तो आप समस्याओं में भाग सकते हैं।
इसके लिए एक अच्छा उदाहरण प्रत्यक्ष रूप से उल्लेख किया गया प्रत्यक्ष प्रपत्र II फ़िल्टर है: II से प्रत्यक्ष फ़िल्टर (उदाहरण के लिए https://ccrma.stanford.edu/~jos/fp/Direct_Form_II.html ) मूल रूप से इनपुट को फ़िल्टर करने वाले राज्य चर की गणना करता है पोल-ओनली ट्रांसफर फ़ंक्शन के साथ पहले और फिर आउटपुट बनाने के लिए शून्य के साथ फ़िल्टरिंग। अब यदि पोल यूनिट सर्कल के करीब हैं, तो पोल-ओनली ट्रांसफर फंक्शन बहुत, बहुत बड़ा हो जाता है। तो राज्य चर इनपुट (80db से 100dB बड़ा) की तुलना में बहुत बड़ा हो सकता है और इनपुट के साथ राज्य चर का योग बहुत शोर पैदा करता है।
यहाँ समाधान एक ट्रांसपोज़्ड फॉर्म II या डायरेक्ट फॉर्म I फ़िल्टर पर जाना है। विश्लेषण से पता चलता है कि राज्य चर इनपुट / आउटपुट से बड़ा नहीं हो सकता है, फिर शायद 12dB या इसके स्थान पर, इसलिए समस्या परिमाण बेमेल पहले स्थान पर नहीं होती है।