2010-10-22 9 views
5

में आईबीएम फ़्लोटिंग पॉइंट गुणा/अतिरिक्तकरण को अनुकरण करना मैं एक एक्सेस 2003 या एक्सेस 2010 पर्यावरण में एक (अब मौजूदा) मेनफ्रेम रिपोर्ट जेनरेटर अनुकरण करने का प्रयास कर रहा हूं। जो डेटा उत्पन्न करता है उसे शुरुआती 70 के दशक से पेपर रिपोर्ट के साथ मिलना चाहिए। दुर्भाग्यवश, शुरुआती वर्षों के डेटा हार्डवेयर पर चल रहे थे जो आईईईई के बजाय आईबीएम फ्लोटिंग पॉइंट प्रस्तुति का इस्तेमाल करते थे। Google की मदद से, मुझे वीबीए फ़ंक्शंस की एक लाइब्रेरी मिली है जो एक फ्लोट को दशमलव से IEEE 754 32 बिट बाइनरी प्रारूप में परिवर्तित कर देगी। मुझे 32 बिट या 64 बिट फ्लोट स्वीकार करने के लिए लाइब्रेरी को संशोधित करना पड़ा, इसलिए मेरे पास फ्लोटिंग पॉइंट प्रारूपों का मामूली कामकाजी ज्ञान है, हालांकि, मुझे आईईईई से आईबीएम बाइनरी प्रारूप में रूपांतरण करने में परेशानी हो रही है, साथ ही मुसीबत गुणा और जोड़ना या तो आईबीएम या आईईईई संख्या।वीबीए

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

अग्रिम धन्यवाद।

+0

क्या आप सुनिश्चित हैं कि आईबीएम पर रिपोर्ट फ्लोटिंग पॉइंट का इस्तेमाल करती है? उस तरह की अधिकांश चीजें बीसीडी का इस्तेमाल करती हैं। – Gabe

+0

मैं 100% निश्चित नहीं हूं - यह दृढ़ संकल्प एक सहकर्मी पर आधारित था जो कि मेनफ्रेम प्रोग्रामर को याद करते हुए कई साल पहले बता रहा था कि जिस कारण से हम पुराने डेटा से मेल नहीं खा सकते हैं, "संकलक दशमलव स्थानों को संभालने के तरीके में परिवर्तन" और खोज के कारण है दस्तावेज जो एसएएस ने असंगतताओं को रोकने से पहले कुछ साल पहले आईबीई फ्लोटिंग पॉइंट के साथ आईईईई फ्लोटिंग पॉइंट के लिए समर्थन जोड़ा। –

+0

बीसीडी प्रारूप एक फ्लोटिंग पॉइंट प्रारूप नहीं था या 70 के दशक के उत्तरार्ध और 80 के दशक में एस/34, एस/36 और एस/38 की आईबीएम मिनी-कंप्यूटर दुनिया में नहीं था। http://en.wikipedia.org/wiki/Binary-coded_decimal –

उत्तर

1

समस्या यह है कि आप दशमलव प्रकार के उपयोग के मुद्दे को भ्रमित कर रहे हैं, और एकल और डबल प्रकार के फ़्लोटिंग पॉइंट मानों में पहुंच में उपलब्ध है।

यदि आप मुद्रा डेटा प्रकार का उपयोग में उपयोग करते हैं, तो यह एक स्केल किए गए पूर्णांक है, और गोलियां उत्पन्न नहीं करेगा (यही वह है जो हम में से अधिकांश वित्तीय गणनाओं और रिपोर्टों के लिए उपयोग करते हैं)। आप दशमलव मानों का उपयोग में भी उपयोग कर सकते हैं, और फिर वे पैकिंग दशमलव के रूप में बिल्कुल गोल नहीं करते हैं।

हालांकि, एक्सेस के अंदर उपलब्ध एकल और दोहरे मूल्य वास्तव में एक ही प्रारूप हैं और आईईईई फ्लोटिंग पॉइंट मानक के अनुरूप हैं।

एक्सेस एकल चर के लिए, यह एक 32bit संख्या है, और सीमा है:

-3.402823E38 
    to 
-1.401298E-45 for negative values 

और

1.401298E-45 
    to 
3.402823E38 for positive values 

आईईईई 754 मानक के रूप में मेरे लिए एक ही लग रहा है यही कारण है कि।

तो, यदि आप एकल के रूप में पहुंच में मूल्य जोड़ते हैं, तो आपको राइडिंग के समान परिणाम मिलना चाहिए।

तो, इंटेल आधारित, और एक्सेस एकल और युगल मुझे विश्वास है कि यह आईईईई मानक के समान है।

एकमात्र असली मुद्दा यह है कि यहां और यहां मूल डेटा का प्रारूप क्या है जिसे आप एक्सेस में खींच रहे हैं, और उस डेटा को खींचने और संग्रहीत करने के दौरान किस प्रकार का टेक्स्ट या स्ट्रिंग या रूपांतरण प्रक्रिया हो रही है?

एक्सेस संख्याओं को परिवर्तित कर सकते हैं। (डिबग विंडो) का उपयोग कमांड लाइन प्रॉम्प्ट पर इन मूल्यों को टाइप करने की कोशिश

? hex(255) 
    Above will show FF 

? csng(&hFF) 
    Above will show 255 

संपादित करें:

आह, ठीक है, मैं देख रहा हूँ अब मैं इस यहाँ उलट, मेरी गलत है। यहां समस्या यह है कि आप किसी संख्या को पुराने आईबीएम प्रारूप (अतिरिक्त 64?) में परिवर्तित करते हैं, तो आपको उन नंबरों को जोड़ने के लिए उपयोग किए जाने वाले कोड पर अपना हाथ प्राप्त करना होगा। असल में, फिर भी, आपके द्वारा खरीदे गए कार्यों के आधार पर अलग-अलग आईबीएम मॉडल वास्तव में अलग-अलग परिणाम उत्पन्न करते हैं (अधिक पैसा = अधिक सटीकता)।

तो, न केवल आपको आंतरिक प्रतिनिधित्व में कनवर्ट करने के लिए रूपांतरण दिनचर्या की आवश्यकता होती है, फिर आपको उन संख्याओं की आवश्यकता होती है जो उन संख्याओं को जोड़/घटाएं/गुणा करें। इसलिए, केवल रूपांतरण दिनचर्या होने से आपको बहुत दूर नहीं जा रहा है, क्योंकि आपको गणित करने वाले अपने सटीक दिनचर्या को भी डुप्लिकेट करना होगा। उन प्रकार के दिनचर्या संभवतः सभी संख्याओं के आधार पर बराबर नहीं बनाई गई हैं।

+0

मुझे नहीं लगता कि यह मामला है कि मैं एक्सेस में एकल/युगल के बारे में उलझन में हूं। मुझे पता है कि वे दोनों एक ही प्रारूप हैं। समस्या यह है कि मुझे ऐसे सिस्टम से उत्पन्न होने वाली संख्याओं से मेल खाना जरूरी है जो आईईईई 754 प्रारूप का उपयोग नहीं करते थे। एक्सेस में जाने वाली संख्याएं निश्चित-बिंदु टेक्स्ट प्रारूप (उदाहरण के लिए, 123.456, हमेशा 3 दशमलव स्थानों के साथ) हैं। कठिनाई यह है कि ऐसी गणनाएं हैं जो इन तीनों में से तीन को गुणा करती हैं और फिर उनमें से हजारों को एक साथ जोड़ती हैं - मुझे मूल हार्डवेयर/सॉफ़्टवेयर पर होने वाली सटीक त्रुटियों का अनुकरण करने की आवश्यकता है। –

+0

आह, हाँ, मैंने यह गलत पढ़ा है। यहां मेरे संपादन + और टिप्पणियां देखें। मुझे लगता है कि आईबीएम प्रारूप में रूपांतरण बहुत कठिन नहीं हो सकता है, लेकिन यह समस्या का केवल एक छोटा हिस्सा है। आंतरिक परिशुद्धता को ढूंढना आसान है, लेकिन यह पता लगाना कि गणित के दिनचर्या कैसे काम करती हैं और वे गोल करने के तरीके को कैसे संभालेंगे, यह एक अच्छा सौदा होगा। –

2

ईमानदार होने के लिए आप हरक्यूलिस एमुलेटर को देखकर शुरू करने के लिए बेहतर प्रदर्शन करेंगे। http://www.hercules-390.org/ वीबीए के साथ सिद्धांत में इसके अलावा आप अच्छे परिणाम प्राप्त करने के लिए दशमलव प्रकार का उपयोग कर सकते हैं (ध्यान दें कि आपको इन्हें बनाने के लिए सीडीईसी है) यह दस स्केलर की परिवर्तनीय शक्ति के साथ 12 बिट्स का उपयोग करता है।

एक त्वरित गूगल हरक्यूलिस समूह, जो हार्डवेयर पता करने के लिए की आवश्यकता होगी, के बारे में Alberts बिंदु की पुष्टि करता है से this post पता चलता है:

--- Snip--

सिद्धांत रूप में, बल्कि बहुत कम व्यवहार में। एस/360 और एस/370 में वैज्ञानिक या वाणिज्यिक निर्देश सेट की पसंद थी। पूर्व में एफपी निर्देश और आधार पर पंजीयक जोड़ा गया; उत्तरार्द्ध दशमलव निर्देश, संपादित करें और संपादित करें & मार्क सहित। लेकिन बड़ा 360 (आईआईआरसी/65 और ऊपर) और 370 (/ 155 और ऊपर) मॉडल में दो का संघ था, जिसे यूनिवर्सल निर्देश सेट कहा जाता था, और किसी बिंदु पर एस/370 ने विकल्प छोड़ा था।

--- कटाव ---

मैं कहना है कि हरक्यूलिस स्रोत कोड आप शायद (वास्तव में कौन-चल बिन्दु आपरेशन कोड पता लगाने की परिशुद्धता एकल, लंबे समय के संदर्भ में की आवश्यकता होगी को देखा होने है, विस्तारित) किया जा रहा है।