मैं एक प्रोग्राम बनाए रख रहा हूं जो पीडीपी -11 (नकली!) प्रोग्राम से डेटा लेता है और इसे आधुनिक विंडोज-आधारित सिस्टम में रखता है। हमें "1. # क्यूएनएएन" और "1. # क्यूएनबी" के रूप में रिपोर्ट किए गए कुछ डेटा मानों में समस्याएं आ रही हैं। ग्राहक ने हाल ही में खुलासा किया है कि पीडीपी -11 कार्यक्रम में 'खराब' मानों को 2 16-बिट शब्दों द्वारा दर्शाया जाता है, जिनमें पहले बिट्स सेट किए गए सभी बिट्स सेट होते हैं। मुझे लगता है कि यह तब होता है जब हम इन्हें आईईईई फ्लोट में बदलने की कोशिश करते हैं कि हमें त्रुटियां मिल रही हैं।क्या यह सी ++ पीडीपी -11 फ्लोट आईईईई में परिवर्तित करेगा?
मुझे नीचे दिया गया कोड मिला है जिसका उपयोग पीडीपी -11 मानों को आईईईई में परिवर्तित करने के लिए किया जाता है। मैं फ्लोटिंग पॉइंट प्रस्तुतियों की जटिलताओं के संपर्क में नहीं हूं लेकिन यह मेरे लिए थोड़ा सा आसान लगता है! क्या यह सचमुच विश्वसनीय रूप से पीडीपी -11 फ्लोट को आईईईई में परिवर्तित करेगा?
// ---------------------------------------------------------------- cnvPDPfloat
// CNVPDPFLOAT
// ----------------------------------------------------------------------------
//
// Converts PDP11 float (two 16-bit words) into IEEE float
//
// PDP11 and IEEE floats have same layout so can be mapped onto eachother.
// But PDP11 exponent must have 2 subtracted for IEEE. Or just divide by 4.
//
float cnvPDPfloat(PDP11Float input)
{
union
{
unsigned long pdp11;
float ieee;
} uFloat;
uFloat.pdp11 = (input.word[0] << 16) + input.word[1];
return (uFloat.ieee/(float) 4.0);
}
--- एलिस्टेयर।
+1 बस है। –
ध्यान दें कि '1. # क्यूएनबी' बस 4 स्थानों पर' 1. # QNAN' "गोलाकार" है। (मुझे '# आईएनएफ' के "सामान्य" होने के अधिक सामान्य मामले के बारे में पिछले SO प्रश्न नहीं मिल रहा है। '0 जे'' –