2012-09-23 89 views
7

मैं अपने Mandelbrot screensaver के एक नए संस्करण पर काम कर रहा हूं और मैं फ्लोटिंग पॉइंट सटीकता से बाहर चला रहा हूं - सरल double मूल्यों में मेरी ज़रूरतों के लिए पर्याप्त महत्वपूर्ण आंकड़े नहीं हैं।सी # के लिए "विस्तारित" के बराबर कोई समकक्ष?

अधिक महत्वपूर्ण आंकड़े = में भग्न

वापस जूमिंग जब मैं डेल्फी 7 में इस स्क्रीनसेवर के एक संस्करण में लिखा है की अधिक से अधिक स्तर, मैं extended चल बिन्दु प्रकार, आकार में 80 बिट का इस्तेमाल किया।

.NET में, मैं decimal पर स्विच कर सकता था, लेकिन इसके लिए प्रदर्शन हिट भयानक है, 20 या उससे अधिक के कारक द्वारा फ्रैक्टल पीढ़ी को धीमा कर रहा है।

क्या के समतुल्य के लिए कोई समकक्ष है? या, वैकल्पिक रूप से, डबल से उच्च परिशुद्धता वाले कोई संख्यात्मक प्रकार हैं जो अभी भी मूल्यांकन के लिए एफपीयू का उपयोग करते हैं और इसलिए दशमलव का उच्च प्रदर्शन हिट नहीं है?

अद्यतन

मेरे स्क्रीनसेवर पहले से ही कई (! कई) परिमाण के आदेश द्वारा भग्न में ज़ूम करने का प्रबंधन करता है; वर्तमान में यह केवल मूल फ्रैक्टल पर रीसेट करता है जब उपयोग में संख्यात्मक प्रकार आसन्न पिक्सल के लिए ऑर्डिनेट को अलग करने में असमर्थ होता है। डबल-विस्तारित सुधार से परिशुद्धता के अतिरिक्त 16 बिट मुझे आकार के 16 और दोगुनी दोगुना कर देंगे।

प्रदर्शन के रूप में, मेरे एल्गोरिदम पहले से ही गणित के 95-99% को खत्म करने का प्रबंधन करता है (एक निष्पक्ष कार्यान्वयन की तुलना में जो कई पिक्सेल की गणना करता है), जबकि फ्रैक्टल की अखंडता को बनाए रखते हुए।

+0

आपको इसके लिए मूल कोड लिखने की आवश्यकता है, क्योंकि विस्तारित x86 में 80-बिट फ़्लोटिंग पॉइंट रजिस्टर का उपयोग करता है। या मुझे यकीन नहीं है कि कार्यक्रम की भूख को और अधिक सटीकता के लिए कम करना संभव है। मैं इस पर विशेषज्ञ नहीं हूं, इसलिए मैं कोई और सलाह नहीं दे सकता। – nhahtdh

उत्तर

4

64-बिट प्लेटफार्मों पर, Extended प्रकार डबल, जो केवल 8 बाइट्स के लिए एक उपनाम है। 32-बिट प्लेटफ़ॉर्म पर, Extended संख्या को 10 बाइट्स (80 बिट्स) के रूप में दर्शाया गया है।

इसका मतलब है कि आपका डेल्फी प्रोग्राम 64 बिट प्लेटफ़ॉर्म में भी अच्छा प्रदर्शन नहीं कर सकता है।

यदि आपको 64 बिट से अधिक के साथ एक संख्यात्मक डेटा प्रकार की आवश्यकता है तो decimal पर जाएं और प्रदर्शन को बेहतर बनाने के लिए अपने एल्गोरिदम अनुकूलित करें।

+0

सहमत हुए। मुझे नहीं लगता कि आपको उच्च-रिज़ॉल्यूशन मंडलेब्रॉट रेंडर की गणना करने के लिए अधिक सटीक परिशुद्धता की आवश्यकता है (इस तथ्य से साबित हुआ है कि बहुत से प्रोग्राम हैं जो बहुत क्विक गति में लगभग अनंत रूप से गहरे होते हैं)। मुझे लगता है कि ओपी को समस्या को हल करने के बारे में सोचने की जरूरत है। – Dai