الفاصلة العشرية العائمة

يشير مصطلح الحساب العشري ذو الفاصلة العائمة ( DFP ) إلى كلٍ من تمثيل الأعداد العشرية ذات الفاصلة العائمة وإجراء العمليات عليها . ويمكن تجنب أخطاء التقريب التي تحدث عادةً عند التحويل بين الكسور العشرية (الشائعة في البيانات التي يُدخلها الإنسان، مثل القياسات أو المعلومات المالية) والكسور الثنائية (ذات الأساس 2) عند التعامل مباشرةً مع الكسور العشرية (الأساس 10).

تتميز تمثيلات الأعداد العشرية ذات الفاصلة العائمة عن تمثيلات الأعداد العشرية ذات الفاصلة الثابتة والأعداد الصحيحة بدعمها لنطاق أوسع بكثير من القيم. فعلى سبيل المثال، بينما يمكن لتمثيل ذي فاصلة ثابتة بثمانية أرقام عشرية ومنزلتين عشريتين تمثيل الأعداد 123456.78، 8765.43، 123.00، وهكذا، فإن تمثيلاً ذا فاصلة عائمة بثمانية أرقام عشرية يمكنه أيضاً تمثيل الأعداد 1.2345678، 1234567.8، 0.000012345678، 12345678000000000، وهكذا. هذا النطاق الأوسع يُبطئ بشكل كبير تراكم أخطاء التقريب أثناء العمليات الحسابية المتتالية؛ فعلى سبيل المثال، يمكن استخدام خوارزمية جمع كاهان في الأعداد ذات الفاصلة العائمة لجمع العديد من الأعداد دون تراكم أخطاء التقريب.

التطبيقات

تتجلى الاستخدامات الميكانيكية المبكرة للفاصلة العشرية العائمة في المعداد ، والمسطرة الحاسبة ، وآلة حاسبة سمولوود ، وبعض الآلات الحاسبة الأخرى التي تدعم إدخال البيانات بالصيغة العلمية . في حالة الآلات الحاسبة الميكانيكية، غالبًا ما يُعامل الأس كمعلومة جانبية تُحسب بشكل منفصل.

دعم حاسوب IBM 650 تنسيق الفاصلة العائمة العشري ذي 8 خانات في عام 1953. [ 1 ] [ 2 ] ودعم جهاز Wang VS، الذي كان ثنائيًا في الأصل، تنسيق الفاصلة العائمة العشري ذي 64 بت في عام 1977. [ 3 ] ودعم معالج Motorola 68881 تنسيقًا مكونًا من 17 خانة للكسر و3 خانات للأس في عام 1984، مع توفير مكتبة دعم الفاصلة العائمة لمعالج Motorola 68040 تنسيق تخزين متوافق للفاصلة العائمة العشري ذي 96 بت في عام 1990. [ 3 ]

تتضمن بعض لغات البرمجة تطبيقاتٍ للحسابات العشرية ذات الفاصلة العائمة، منها PL/I و . NET [4 ] وبرنامج emacs مع دالة calc، ووحدة decimal في لغة بايثون [ 5 ] . في عام 1987، أصدر معهد مهندسي الكهرباء والإلكترونيات (IEEE) معيار IEEE 854 ، وهو معيار للحوسبة باستخدام الفاصلة العائمة العشرية، والذي افتقر إلى تحديد كيفية ترميز بيانات الفاصلة العائمة لتبادلها مع الأنظمة الأخرى. وقد تم تدارك هذا الأمر لاحقًا في معيار IEEE 754-2008 ، الذي وحّد ترميز بيانات الفاصلة العائمة العشرية، وإن كان ذلك باستخدام طريقتين بديلتين مختلفتين.

تتضمن معالجات IBM POWER6 والمعالجات الأحدث من سلسلة POWER تقنية DFP مدمجة في مكوناتها المادية، وكذلك نظام IBM z9 [ 6 ] (وأجهزة zSeries اللاحقة). تقدم SilMinds معالج SilAx، وهو معالج مساعد DFP متجهي قابل للتكوين . [ 7 ] يحدد معيار IEEE 754-2008 هذه التقنية بمزيد من التفصيل. كما تمتلك Fujitsu معالجات SPARC 64 بت مزودة بتقنية DFP مدمجة في مكوناتها المادية. [ 8 ] [ 3 ]

ترميز IEEE 754-2008

يُحدد معيار IEEE 754-2008 تمثيلات الأعداد العشرية ذات الفاصلة العائمة بأطوال 32 و64 و128 بت. وكما هو الحال في تنسيقات الأعداد الثنائية ذات الفاصلة العائمة، يُقسّم العدد إلى إشارة وأس وجزء معنوي . وعلى عكس الأعداد الثنائية ذات الفاصلة العائمة، لا تُعدّ الأعداد بالضرورة مُوحدة؛ فالقيم ذات الأرقام المعنوية القليلة لها تمثيلات متعددة محتملة: 1×10² = 0.1× 10³ = 0.01× 10⁴ ، وهكذا. عندما يكون الجزء المعنوي صفرًا، يمكن أن يكون الأس أي قيمة.

تنسيقات الفاصلة العائمة العشرية IEEE 754-2008
decimal32decimal64128 عشريعشري (32 ألف )شكل
1111حقل الإشارة (بتات)
5555حقل التركيب (بتات)
6812w = 2 × k + 4حقل استمرار الأس (بتات)
2050110t = 30× k −10حقل استمرار المعامل (بتات)
326412832× كيلوجولالحجم الإجمالي (بت)
71634p = 3 × t / 10 + 1 = 9 × k − 2حجم المعامل (بالأرقام العشرية)
192768122883×2 w = 48×4 kمدى الأس
963846144Emax = 3×2 w −1أكبر قيمة هي 9.99...×10 Emax
-95-383-6143Emin = 1−Emaxأصغر قيمة معيارية هي 1.00...×10 Emin
-101-398-6176Etiny = 2−p−Emaxأصغر قيمة غير صفرية هي 1×10 إيتيني

تم اختيار نطاقات الأسس بحيث يكون النطاق المتاح للقيم المعيارية متناظرًا تقريبًا. ولأن هذا لا يمكن تحقيقه بدقة مع عدد زوجي من قيم الأسس الممكنة، فقد أُعطيت قيمة إضافية لـ Emax.

تم تعريف تمثيلين مختلفين:

  • يقوم النظام الذي يحتوي على حقل معامل ثنائي بترميز المعامل كعدد صحيح ثنائي كبير بين 0 و 10^ p - 1. ومن المتوقع أن يكون هذا أكثر ملاءمة لتطبيقات البرامج التي تستخدم وحدة حساب ومنطق ثنائية .
  • يستخدم نظام آخر حقلًا عشريًا كثيفًا للأرقام العشرية، مما يُشفّر الأرقام العشرية بشكل مباشر. هذا يجعل التحويل من وإلى صيغة الفاصلة العائمة الثنائية أسرع، ولكنه يتطلب أجهزة متخصصة للتعامل معها بكفاءة. ومن المتوقع أن يكون هذا النظام أكثر ملاءمة لتطبيقات الأجهزة.

يوفر كلا البديلين نفس نطاق القيم القابلة للتمثيل تمامًا.

يقتصر نطاق البتتين الأكثر أهمية في الأس على 0-2، بينما يقتصر نطاق البتات الأربع الأكثر أهمية في الجزء الكسري على 0-9. يتم ترميز التركيبات الثلاثين الممكنة في حقل مكون من 5 بتات، بالإضافة إلى أشكال خاصة للقيم اللانهائية و NaN .

إذا كانت أهم 4 بتات من الجزء المهم تقع بين 0 و7، فإن القيمة المشفرة تبدأ على النحو التالي:

s 00mmm xxx يبدأ الأس بـ 00، والمعامل يبدأ بـ 0mmm s 01mmm xxx يبدأ الأس بـ 01، والمعامل يبدأ بـ 0mmm s 10mmm xxx يبدأ الأس بـ 10، والمعامل بـ 0mmm

إذا كانت البتات الأربعة الأولى من الجزء الدال هي 1000 أو 1001 بالنظام الثنائي (8 أو 9 بالنظام العشري)، فإن العدد يبدأ على النحو التالي:

s 1100m xxx يبدأ الأس بـ 00، والمعامل بـ 100m s 1101m xxx يبدأ الأس بـ 01، والمعامل بـ 100m s 1110m xxx يبدأ الأس بـ 10، والعدد المعنوي بـ 100m

البتة الرائدة (s في المثال أعلاه) هي بتة الإشارة، والبتات التالية (xxx في المثال أعلاه) تشفر بتات الأس الإضافية وبقية الرقم الأكثر أهمية، ولكن التفاصيل تختلف حسب بديل التشفير المستخدم.

تُستخدم التركيبات النهائية للقيم اللانهائية و NaN، وهي نفسها لكلا الترميزين البديلين:

s 11110 x ±Infinity (انظر خط الأعداد الحقيقية الممتد ) s 11111 0 quiet NaN (تم تجاهل بت الإشارة) s 11111 1 إشارة NaN (تم تجاهل بت الإشارة)

في الحالات الأخيرة، يتم تجاهل جميع البتات الأخرى للترميز. وبالتالي، من الممكن تهيئة مصفوفة بقيم NaN عن طريق ملئها بقيمة بايت واحد.

حقل المعامل الثنائي الصحيح

يستخدم هذا التنسيق قيمة ثنائية للدلالة تتراوح من 0 إلى 10^ p - 1. على سبيل المثال، يمكن أن تصل قيمة الدلالة في نظام Decimal32 إلى 10 ^7 - 1 = 9999999 = 98967F ^ 16 = 1001 1000100101 1001111111 2^16 . مع أن هذا الترميز قادر على تمثيل قيم دلالية أكبر، إلا أنها غير مسموح بها، ويشترط المعيار على التطبيقات التعامل معها كقيمة 0 عند مصادفتها في المدخلات.

كما هو موضح أعلاه، يختلف الترميز اعتمادًا على ما إذا كانت البتات الأربعة الأكثر أهمية من الجزء المهم تقع في النطاق من 0 إلى 7 (0000 2 إلى 0111 2 )، أو أعلى (1000 2 أو 1001 2 ).

إذا كانت البتتان التاليتان لبت الإشارة هما "00" أو "01" أو "10"، فإن حقل الأس يتكون من البتات الثمانية التالية لبت الإشارة (البتتان المذكورتان بالإضافة إلى 6 بتات من "حقل استمرار الأس")، والجزء الكسري هو البتات الـ 23 المتبقية، مع بت 0 ضمني في البداية، موضح هنا بين قوسين:

s 00eeeeee (0)ttt tttttttttt tttttttttt s 01eeeeee (0)ttt tttttttttt tttttttttt s 10eeeeee (0)ttt ttttttttt ttttttttt 

يشمل ذلك الأعداد غير الطبيعية حيث يكون الرقم المعنوي الأول هو 0.

إذا كانت البتتان التاليتان لبت الإشارة هما "11"، فسيتم إزاحة حقل الأس ذي 8 بتات بمقدار بتين إلى اليمين (بعد كل من بت الإشارة والبتات "11" التي تليه)، ويكون الجزء الكسري المُمثَّل في البتات الـ 21 المتبقية. في هذه الحالة، يوجد تسلسل ضمني (أي غير مُخزَّن) من 3 بتات في بداية الجزء الكسري الحقيقي وهو "100".

s 1100eeeeee (100)t tttttttttt tttttttttt s 1101eeeeee (100)t tttttttttt tttttttttt s 1110eeeeee (100)t tttttttttt tttttttttt 

يشير التسلسل المكون من 2 بت "11" بعد بت الإشارة إلى وجود بادئة ضمنية مكونة من 3 بت "100" للجزء المهم.

لاحظ أن البتات الأولى في حقل المعامل لا تُشفّر الرقم العشري الأكثر أهمية؛ بل هي ببساطة جزء من عدد ثنائي أكبر. على سبيل المثال، يُشفّر المعامل 8,000,000 بالصيغة الثنائية 0111 1010000100 1000000000 ، حيث تُشفّر البتات الأربع الأولى الرقم 7؛ أما المعامل الأول الذي يتطلب بتًا رابعًا وعشرين (وبالتالي صيغة التشفير الثانية) فهو 2²³ = 8,388,608 .

في الحالات المذكورة أعلاه، تكون القيمة الممثلة هي:

(−1) إشارة × 10 أس −101 × المعامل

يعمل كل من Decimal64 و Decimal128 بشكل مماثل، ولكن مع استمرار أكبر للأس وحقول أكبر للمعامل. بالنسبة لـ Decimal128، لا يُستخدم شكل التشفير الثاني أبدًا؛ إذ يمكن تمثيل أكبر معامل صالح وهو 10 ^34 - 1 = 1ED09BEAD87C0378D8E63FFFFFFFF 16 في 113 بت.

حقل الأرقام العشرية المعنوية المكتظ

في هذه النسخة، يتم تخزين الجزء الكسري كسلسلة من الأرقام العشرية. الرقم الأول يقع بين 0 و9 (3 أو 4 بتات ثنائية)، ويستخدم باقي الجزء الكسري ترميز DPD (الترميز العشري المضغوط بكثافة ).

يتم دمج أول بتين من الأس والرقم الأول (3 أو 4 بتات) من الجزء الكسري في البتات الخمسة التي تلي بت الإشارة. يلي ذلك حقل استمرار الأس ذو الإزاحة الثابتة.

وأخيرًا، يتكون حقل استمرار المعامل المهم من 2 أو 5 أو 11 وحدة عشرية من 10 بتات ، كل منها يشفر 3 أرقام عشرية. [ 9 ]

إذا كانت أول بتين بعد بت الإشارة هما "00" أو "01" أو "10"، فإن هذه هي البتات الرائدة للأس، ويتم تفسير البتات الثلاثة التي تليها على أنها الرقم العشري الرائد (من 0 إلى 7): [ 10 ]

 الجمع الأس الدال s 00 TTT (00)eeeeee (0TTT)[tttttttttt][tttttttttt] s 01 TTT (01)eeeeee (0TTT)[tttttttttt][tttttttttt] s 10 TTT (10)eeeeee (0TTT)[tttttttttt][tttttttttt] 

إذا كانت أول بتين بعد بت الإشارة هما "11"، فإن البتين الثانيين هما البتات الرائدة للأس، ويتم إضافة "100" كبادئة للبت الأخير لتشكيل الرقم العشري الرائد (8 أو 9):

 الجمع الأس الدال s 1100 T (00)eeeeee (100T)[tttttttttt][tttttttttt] s 1101 T (01)eeeeee (100T)[tttttttttt][tttttttttt] s 1110 T (10)eeeeee (100T)[tttttttttt][tttttttttt] 

يتم استخدام التركيبتين المتبقيتين (11110 و 11111) من الحقل ذي 5 بت لتمثيل ±infinity و NaNs، على التوالي.

عمليات حسابية بنقطة عائمة

القاعدة المعتادة لإجراء العمليات الحسابية ذات الفاصلة العائمة هي حساب القيمة الرياضية الدقيقة، [ 11 ] ثم تقريب النتيجة إلى أقرب قيمة قابلة للتمثيل ضمن الدقة المحددة. وهذا في الواقع هو السلوك المطلوب لأجهزة الحاسوب المتوافقة مع معايير IEEE، في ظل سلوك التقريب العادي وفي غياب أي ظروف استثنائية.

لتبسيط العرض والفهم، سيتم استخدام دقة سبعة أرقام في الأمثلة. تبقى المبادئ الأساسية كما هي بغض النظر عن مستوى الدقة.

إضافة

إحدى الطرق البسيطة لجمع الأعداد العشرية هي تمثيلها أولاً بنفس الأس. في المثال أدناه، تم إزاحة العدد الثاني إلى اليمين بمقدار 3 خانات. نتابع الآن طريقة الجمع المعتادة:

المثال التالي هو مثال عشري، مما يعني ببساطة أن الأساس هو 10.

 123456.7 = 1.234567 × 10⁵ 101.7654 = 1.017654 × 10² = 0.001017654 × 10⁵

لذلك:

 123456.7 + 101.7654 = (1.234567 × 10⁵ ) + (1.017654 × 10² ) = (1.234567 × 10⁵ ) + (0.001017654 × 10⁵ ) = 10 5 × (1.234567 + 0.001017654) = 10 5 × 1.235584654

هذا ليس سوى تحويل إلى الصيغة العلمية . بالتفصيل:

 e=5; s=1.234567 (123456.7) + e=2; s=1.017654 (101.7654)
 e=5; s=1.234567 + e=5; s=0.001017654 (بعد الإزاحة) -------------------- e=5; s=1.235584654 (المجموع الحقيقي: 123558.4654)

هذه هي النتيجة الحقيقية، وهي المجموع الدقيق للمعاملات. سيتم تقريبها إلى 7 أرقام ثم تطبيعها إذا لزم الأمر. النتيجة النهائية هي:

 ه = 5؛ ق=1.235585 (المجموع النهائي: 123558.5)

لاحظ أن الأرقام الثلاثة الأولى من المعامل الثاني (654) تُفقد فعلياً. هذا خطأ تقريب . في الحالات القصوى، قد يساوي مجموع عددين غير صفريين أحدهما.

 e=5; s=1.234567 + e=−3; s=9.876543
 e=5; s=1.234567 + e=5; s=0.00000009876543 (بعد التحويل) ---------------------- e=5; s=1.23456709876543 (المجموع الحقيقي) e=5; s=1.234567 (بعد التقريب/التطبيع)

تظهر مشكلة أخرى تتمثل في فقدان الدلالة عند طرح قيم تقريبية لعددين متساويين تقريبًا. في المثال التالي ، e  =  s  =  1.234571 و e  =  s  =  1.234567 هما قيمتان تقريبيتان للعددين النسبيين 123457.1467 و 123456.659.

 e=5; s=1.234571 − e=5; s=1.234567 ---------------- e=5; s=0.000004 e=−1; s=4.000000 (بعد التقريب والتطبيع)

يُحسب الفرق بين الأعداد العشرية بدقة لأن الأعداد متقاربة - تضمن مبرهنة ستيربنز ذلك، حتى في حالة حدوث نقص في البيانات عند دعم النقص التدريجي . مع ذلك، فإن الفرق بين الأعداد الأصلية هو e  =  −1؛ s  =  4.877000، وهو يختلف بأكثر من 20% عن الفرق e  =  −1؛ s  =  4.000000 في التقريبات. في الحالات القصوى، قد تُفقد جميع الأرقام المعنوية للدقة. [ 12 ] [ 13 ] يوضح هذا الحذف خطورة افتراض أن جميع أرقام النتيجة المحسوبة ذات معنى. يُعد التعامل مع عواقب هذه الأخطاء موضوعًا في التحليل العددي ؛ انظر أيضًا مشاكل الدقة .

الضرب

للضرب، يتم ضرب الأرقام المعنوية، بينما يتم جمع الأسس، ويتم تقريب النتيجة وتطبيعها.

 e=3; s=4.734612 × e=5؛ s=5.417242 ----------------------- e=8; s=25.648538980104 (الناتج الحقيقي) e=8; s=25.64854 (بعد التقريب) e=9; s=2.564854 (بعد التطبيع)

تتم عملية القسمة بشكل مشابه، ولكنها أكثر تعقيداً.

لا توجد مشاكل في الإلغاء أو الاستيعاب في عمليات الضرب أو القسمة، مع أن أخطاءً صغيرة قد تتراكم مع تكرار العمليات. عمليًا، قد تكون طريقة تنفيذ هذه العمليات في المنطق الرقمي معقدة للغاية.

انظر أيضاً

مراجع

  1. IBM (1955). "ميزات إضافية لـ IBM 650 MDDPM (النموذج 22-6258-0)" (PDF) .
  2. بيبي، نيلسون إتش إف (22 أغسطس 2017). "الفصل هـ. بنى الفاصلة العائمة التاريخية". دليل حساب الدوال الرياضية - البرمجة باستخدام مكتبة برامج MathCW المحمولة ( الطبعة الأولى). سولت ليك سيتي، يوتا، الولايات المتحدة الأمريكية: سبرينغر إنترناشونال بابليشينج إيه جي . ص 948. doi : 10.1007/978-3-319-64110-2 . ISBN   978-3-319-64109-6. LCCN 2017947446 . S2CID 30244721 .  
  3. 1 2 3 سافارد، جون جي جي (2018) [2007]. "معيار الفاصلة العائمة العشري" . quadibloc . مؤرشف من الأصل في 2018-07-03 . تم الاسترجاع في 2018-07-16 .
  4. "وثائق واجهة برمجة تطبيقات .NET لـ System.Decimal" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 7 يوليو 2024 .
  5. "توثيق بايثون للأعداد العشرية" . docs.python.org . تم الاطلاع عليه بتاريخ 2024-07-07 .
  6. "IBM z9 EC و z9 BC - تقديم قيمة أكبر للجميع" (ملف PDF) . 306.ibm.com . تاريخ الاسترجاع: 2018-07-07 .
  7. "وحدات الملكية الفكرية الحسابية للتطبيقات المالية - SilMinds" . Silminds.com .
  8. "الفصل 4. تنسيقات البيانات". مواصفات Sparc64 X/X+ . ناكاهارا-كو، كاواساكي، اليابان. يناير 2015. ص 13. {{cite book}}: CS1 maint: موقع الناشر مفقود ( رابط )
  9. ^ مولر، جان ميشيل. بريسبار، نيكولاس. دي دينشين، فلوران؛ جانرود، كلود بيير؛ لوفيفر، فنسنت؛ ملكيوند، غيوم؛ ريفول, ناتالي ; ستيهلي، داميان؛ توريس، سيرج (2010). دليل حساب النقطة العائمة (1 ed.). بيركهوسر . دوى : 10.1007/978-0-8176-4705-6 . رقم ISBN  978-0-8176-4704-9. إل سي سي إن 2009939668 . 
  10. مواصفات ترميز النظام العشري، الإصدار 1.00 ، من شركة IBM
  11. لا تقوم أجهزة الكمبيوتر بالضرورة بحساب القيمة الدقيقة؛ بل يجب عليها ببساطة إنتاج النتيجة المقربة المكافئة كما لو أنها قامت بحساب النتيجة الدقيقة للغاية.
  12. غولدبيرغ، ديفيد (مارس 1991). "ما يجب أن يعرفه كل عالم حاسوب عن الحساب ذي الفاصلة العائمة" (ملف PDF) . مجلة ACM Computing Surveys . 23 (1): 5-48 . doi : 10.1145/103162.103163 . S2CID 222008826. تاريخ الاسترجاع: 20 يناير 2016 . (،،( تمت أرشفة بتاريخ 11 أكتوبر 2017 في موقع Wayback Machine )
  13. ↑ براءة اختراع أمريكية رقم 3037701A ، هوبيرتو إم سييرا، "وسائل التحكم الحسابي للفاصلة العشرية العائمة للآلة الحاسبة"، صدرت في 5 يونيو 1962 

للمزيد من القراءة