2012-03-31 41 views
5

मैं एक ऐसा प्रोग्राम बनाने की प्रक्रिया में हूं जो एक वीएचडीएल टेस्टबेंच में उपयोग किए जाने वाले परीक्षण वैक्टर उत्पन्न करता है। Testbench अनिवार्य रूप से हार्डवेयर के एक टुकड़े का परीक्षण करता है जो एक सटीक फ्लोटिंग पॉइंट योजक के रूप में कार्य करता है, इसलिए वेक्टर आईईईई 754 मानक के अनुरूप होंगे।क्या यह फ्लोट से बिगडिसिल तक वापस खतरनाक है?

वैसे भी, पीढ़ी के लिए मेरी वर्तमान योजना फ्लोट मानों को BigDecimal में परिवर्तित करना है, आवश्यक अंकगणित करें, फिर वापस फ्लोट में कनवर्ट करें। क्या यह खतरनाक है? क्या सटीकता खो जाएगी जिसके परिणामस्वरूप परीक्षण वेक्टर में संभावित रूप से गलत परिणाम होगा? मैं BigDecimal में कनवर्ट करना चाहता हूं, इसलिए मैं मुद्दों को गोल करने से बच सकता हूं।

तो क्या यह परिणाम कम कर देगा?

BigDecimal repA = new BigDecimal(Float.toString(A)); 
BigDecimal repB = new BigDecimal(Float.toString(B)); 
BigDecimal repResult = repA.add(repB); 
float result = repResult.floatValue(); 

जहां ए और बी कुछ फ्लोट हैं।

+0

आप निश्चित रूप से कुछ परिशुद्धता खो देंगे क्योंकि एक फ्लोट सभी संभावित आंशिक संख्याओं का प्रतिनिधित्व नहीं कर सकता है। – anubhava

+0

क्या कोई तरीका है कि मैं इसे किसी भी परिशुद्धता को खोने से पूरा कर सकता हूं? – Franklin

+1

आपको लगता है कि आपको कितना सटीक लगता है? –

उत्तर

5

यदि आपका लक्ष्य फ्लोट की अपेक्षित सीमाओं के भीतर सटीक 32-बिट फ्लोट वैक्टर होना है, तो मुझे आपका दृष्टिकोण पसंद है। आप पहले 32-बिट फ्लोट से उच्च परिशुद्धता वाले ऑब्जेक्ट में परिवर्तित हो रहे हैं, अपने गणित में कई कदम उठा रहे हैं, फिर 32-बिट फ़्लोटिंग पॉइंट में कनवर्ट कर रहे हैं। अंत में, आपकी गोलिंग त्रुटियों की तुलना में कम होगी यदि आपने 32-बिट फ्लोट में मूल रूप से चरणों की एक ही श्रृंखला का प्रदर्शन किया था।

यदि आपका लक्ष्य 32-बिट फ्लोट्स का उपयोग करके गणना करने वाले हार्डवेयर के एक टुकड़े के अपेक्षित परिणामों को सटीक रूप से अनुकरण करना है, तो आप परीक्षण विफलता की गलत रिपोर्टिंग का जोखिम चला सकते हैं क्योंकि आपकी गणना अधिक सटीकता के साथ की जाती है परीक्षण किए जा रहे हार्डवेयर की तुलना में।

+0

मैंने अपना प्रश्न संपादित किया। क्या मैं सही सोच रहा हूँ? – Franklin

+0

आपके उदाहरण के आधार पर, मुझे नहीं लगता कि आपने किसी भी गोल करने वाले मुद्दों से परहेज किया है। यदि आप यादृच्छिक रूप से वेक्टरों को फ्लोट्स के रूप में उत्पन्न कर रहे हैं, उन्हें स्ट्रिंग्स में परिवर्तित कर रहे हैं, स्ट्रिंग्स को बिगडिसीमल में परिवर्तित कर रहे हैं, फिर वापस फ्लोट में कनवर्ट कर रहे हैं, तो आप केवल फ्लोट जोड़ने से बेहतर नहीं होंगे। – phatfingers

+0

हार्डवेयर के टुकड़े को देखें जो मॉडलिंग के आधार पर मूल्यों को कम करता है। तो मेरे सॉफ़्टवेयर का हिस्सा किनारे के मामलों के साथ यादृच्छिक वैक्टर उत्पन्न करना है। मैं परिणाम गोल नहीं कर सकता या अन्यथा हार्डवेयर truncates के बाद परीक्षण बेकार हो जाएगा। – Franklin