العمليات الحسابية ذات الفاصلة العائمة

كان جهاز الكمبيوتر الكهروميكانيكي القابل للبرمجة المبكر، Z3 ، يتضمن عمليات حسابية بنقطة عائمة (نسخة طبق الأصل معروضة في المتحف الألماني في ميونيخ ).

في مجال الحوسبة ، تُعرف العمليات الحسابية ذات الفاصلة العائمة ( FP ) بأنها عمليات حسابية تُجرى على مجموعات جزئية من الأعداد الحقيقية ، تتكون من جزء معنوي ( متتالية مُوقّعة من عدد ثابت من الأرقام في أساس معين ) مضروبًا في قوة صحيحة لذلك الأساس. تُسمى الأعداد من هذا الشكل بالأعداد ذات الفاصلة العائمة . [ 1 ] : 3 [ 2 ] : 10

على سبيل المثال، العدد 2469/200 هو عدد عشري يتكون من خمسة أرقام: 2469/200=12.345=12345هام×10قاعدة-3الأس{\displaystyle 2469/200=12.345=\!\underbrace {12345} _{\text{significand}}\!\times \!\underbrace {10} _{\text{base}}\!\!\!\!\!\!\overbrace {{}^{-3}} ^{\text{exponent}}} مع ذلك، فإنّ 7716/625 = 12.3456 ليس عددًا عشريًا بخمسة أرقام ، بل يحتاج إلى ستة أرقام. أقرب عدد عشري بخمسة أرقام فقط هو 12.346. و1/3 = 0.3333... ليس عددًا عشريًا بأي عدد محدود من الأرقام. عمليًا، تستخدم معظم أنظمة الأعداد العشرية النظام الثنائي ، مع أنّ النظام العشري ( العدد العشري ذو الفاصلة العائمة ) شائع أيضًا.

تُقارب العمليات الحسابية للأعداد العشرية، كالجمع والقسمة، العمليات الحسابية المقابلة للأعداد الحقيقية بتقريب أي نتيجة ليست عددًا عشريًا إلى عدد عشري قريب. [ 1 ] : 22 [ 2 ] : 10 على سبيل المثال، في عملية حسابية للأعداد العشرية بخمسة أرقام عشرية، قد يُقرّب المجموع 12.345 + 1.0001 = 13.3451 إلى 13.345.

يشير مصطلح "العدد ذو الفاصلة العائمة " إلى إمكانية تحرك الفاصلة العشرية في أي مكان إلى يسار أو يمين أو بين الأرقام المعنوية للعدد. ويُشار إلى هذا الموضع بواسطة الأس، لذا يُمكن اعتبار العدد ذو الفاصلة العائمة شكلاً من أشكال الترميز العلمي .

يُمكن استخدام نظام الفاصلة العائمة لتمثيل أعداد ذات رتب مقدارية مختلفة جدًا، باستخدام عدد ثابت من الأرقام ، مثل المسافة بالأمتار بين المجرات أو بين البروتونات في الذرة . لهذا السبب، يُستخدم حساب الفاصلة العائمة غالبًا للسماح بأعداد حقيقية صغيرة جدًا وكبيرة جدًا تتطلب سرعة معالجة عالية. نتيجةً لهذا النطاق الديناميكي ، فإن الأعداد التي يُمكن تمثيلها لا تكون متباعدة بانتظام؛ إذ يختلف الفرق بين عددين متتاليين قابلين للتمثيل باختلاف أسهما. [ 3 ]

الأرقام العشرية ذات الدقة المفردة على خط الأعداد : تشير الخطوط الخضراء إلى القيم القابلة للتمثيل.
النسخة المحسّنة أعلاه تُظهر كلا علامتي القيم القابلة للتمثيل

على مر السنين، استُخدمت مجموعة متنوعة من تمثيلات الأعداد العشرية في الحواسيب. في عام 1985، تم وضع معيار IEEE 754 للحسابات العشرية، ومنذ تسعينيات القرن الماضي، أصبحت التمثيلات التي حددها معهد مهندسي الكهرباء والإلكترونيات (IEEE) هي الأكثر شيوعًا.

تُعد سرعة عمليات الفاصلة العائمة، والتي تُقاس عادةً بوحدة FLOPS ، سمة مهمة لنظام الكمبيوتر ، وخاصة بالنسبة للتطبيقات التي تتضمن حسابات رياضية مكثفة.

يمكن حساب الأعداد العشرية باستخدام برامج (softfloat) أو أجهزة (hardfloat). وحدات معالجة الأعداد العشرية (FPUs، أو ما يُعرف بمعالجات الرياضيات المساعدة ) مصممة خصيصًا لإجراء العمليات على الأعداد العشرية، وهي جزء من معظم أنظمة الحاسوب. عند عدم توفر وحدات معالجة الأعداد العشرية، يمكن استخدام البرامج بدلاً منها.

ملخص

الأرقام العشرية

يحدد تمثيل الأرقام طريقة ما لترميز رقم ما، وعادة ما يكون ذلك على شكل سلسلة من الأرقام.

توجد عدة آليات لتمثيل الأعداد باستخدام سلاسل الأرقام. في الترميز الرياضي القياسي، يمكن أن تكون سلسلة الأرقام بأي طول، ويُشار إلى موضع الفاصلة العشرية بوضع رمز فاصلة صريح (نقطة أو فاصلة). إذا لم تُحدد الفاصلة العشرية، فإن السلسلة تمثل ضمنيًا عددًا صحيحًا ، وتكون الفاصلة العشرية غير المحددة في الطرف الأيمن من السلسلة، بجوار الرقم الأقل أهمية. في أنظمة الفاصلة الثابتة ، يُحدد موضع الفاصلة العشرية في السلسلة. لذا، قد يستخدم نظام الفاصلة الثابتة سلسلة من 8 أرقام عشرية مع وجود الفاصلة العشرية في المنتصف، حيث يُمثل "00012345" العدد 0001.2345.

In scientific notation, the given number is scaled by a power of 10, so that it lies within a specific range—typically between 1 and 10, with the radix point appearing immediately after the first digit. As a power of ten, the scaling factor is then indicated separately at the end of the number. For example, the orbital period of Jupiter's moon Io is 152,853.5047 seconds, a value that would be represented in standard-form scientific notation as 1.528535047×105 seconds.

Floating-point representation is similar in concept to scientific notation. Logically, a floating-point number consists of:

  • A signed (meaning positive or negative) digit string of a given length in a given radix (or base). This digit string is referred to as the significand, mantissa, or coefficient.[nb 1] The length of the significand determines the precision to which numbers can be represented. The radix point position is assumed always to be somewhere within the significand—often just after or just before the most significant digit, or to the right of the rightmost (least significant) digit. This article generally follows the convention that the radix point is set just after the most significant (leftmost) digit.
  • A signed integer exponent (also referred to as the characteristic, or scale),[nb 2] which modifies the magnitude of the number.

To derive the value of the floating-point number, the significand is multiplied by the base raised to the power of the exponent, equivalent to shifting the radix point from its implied position by a number of places equal to the value of the exponent—to the right if the exponent is positive or to the left if the exponent is negative.

Using base-10 (the familiar decimal notation) as an example, the number 152,853.5047, which has ten decimal digits of precision, is represented as the significand 1528535047 together with 5 as the exponent. To determine the actual value, a decimal point is placed after the first digit of the significand and the result is multiplied by 105 to give 1.528535047×105, or 152,853.5047. In storing such a number, the base (10) need not be stored, since it will be the same for the entire range of supported numbers, and can thus be inferred.

Symbolically, this final value is: sbp1×be,{\displaystyle {\frac {s}{b^{\,p-1}}}\times b^{e},}

حيث s هو الجزء الدال (مع تجاهل أي فاصلة عشرية ضمنية)، و p هي الدقة (عدد الأرقام في الجزء الدال)، و b هو الأساس (في مثالنا، هذا هو الرقم عشرة )، و e هو الأس.

تاريخيًا ، استُخدمت عدة أنظمة عد لتمثيل الأعداد العشرية، وكان النظام الثنائي (الأساس 2 ) هو الأكثر شيوعًا ، يليه النظام العشري ( الأساس 10 ) ، وأنواع أخرى أقل شيوعًا ، مثل النظام الست عشري ( الأساس 16 ) ، والنظام الثماني ( الأساس 8 ) ، والنظام الرباعي ( الأساس 7 ) ، والنظام الثلاثي ( الأساس 1 ) ، وحتى النظام 256 .65,536 . [ 8 ] [ ملاحظة 7 ]

العدد العشري هو عدد نسبي ، لأنه يمكن تمثيله كعدد صحيح مقسوم على عدد صحيح آخر؛ على سبيل المثال1.45 × 10³ يساوي ( 145/100)×1000 أو145,000 / 100. يحدد الأساس الكسور التي يمكن تمثيلها؛ على سبيل المثال، لا يمكن تمثيل 1/5 بدقة كرقم ذي فاصلة عائمة باستخدام أساس ثنائي، ولكن يمكن تمثيل 1/5 بدقة باستخدام أساس عشري (0.2 أو2 × 10⁻¹ ). مع ذلك، لا يمكن تمثيل 1/3 بدقة باستخدام النظام الثنائي (0.010101...) أو النظام العشري (0.333...)، ولكن في النظام الثلاثي ، يكون تمثيله بسيطًا (0.1 أو 1×3⁻¹ ) . وتعتمد الحالات التي تحدث فيها عمليات التوسيع اللانهائية على أساس النظام وعوامله الأولية .

تعتمد طريقة تخزين الجزء الدال (بما في ذلك إشارته) والأس في الحاسوب على تصميمه. سيتم شرح تنسيقات IEEE الشائعة بالتفصيل لاحقًا وفي مصادر أخرى، ولكن على سبيل المثال، في التمثيل الثنائي أحادي الدقة (32 بت) للفاصلة العائمة،ص=24{\displaystyle p=24}وبالتالي، فإن الجزء الدال هو سلسلة من 24 بت . على سبيل المثال، أول 33 بت من العدد π هي:11001001 00001111 11011010_ 10100010 0.{\displaystyle 11001001\ 00001111\ 1101101{\underline {0}}\ 10100010\ 0.}

في هذا التمثيل الثنائي، لنرمز إلى المواضع من 0 (البت الأيسر، أو البت الأكثر أهمية) إلى 32 (البت الأيمن). سيتوقف الجزء المهم ذو الـ 24 بت عند الموضع  23، الموضح بالبت المسطر.صفر أعلاه. البت التالي، في الموضع  24، يُسمى بت التقريب . يُستخدم لتقريب القيمة التقريبية المكونة من 33 بت إلى أقرب عدد مكون من 24 بت (هناك قواعد محددة للقيم المتوسطة ، وهو ليس الحال هنا). هذا البت، وهوفي هذا المثال، تتم إضافة الرقم 1 إلى العدد الصحيح المكون من أول 24 بت من اليسار، مما ينتج عنه: 11001001 00001111 11011011_.{\displaystyle 11001001\ 00001111\ 1101101{\underline {1}}.}

عند تخزين هذا في الذاكرة باستخدام ترميز IEEE 754، يصبح هذا هو الجزء الدال s . يُفترض أن يكون للجزء الدال فاصلة ثنائية على يمين البت الأيسر. لذا، يتم حساب التمثيل الثنائي لـ π من اليسار إلى اليمين كما يلي: (ن=0ص-1قليلن×2-ن)×2هـ=(1×2-0+1×2-1+0×2-2+0×2-3++1×2-23)×211.57079637×23.1415927{\displaystyle {\begin{aligned}&{\biggl (}\sum _{n=0}^{p-1}{\text{bit}}_{n}\times 2^{-n}{\biggr )}\times 2^{e}\\&\qquad {}=\left(1\times 2^{-0}+1\times 2^{-1}+0\times 2^{-2}+0\times 2^{-3}+\cdots +1\times 2^{-23}\right)\times 2^{1}\\[2mu]&\qquad {}\approx 1.57079637\times 2\\[3mu]&\qquad {}\approx 3.1415927\end{aligned}}}

حيث p هي الدقة ((24 في هذا المثال)، n هو موضع بت الجزء الدال من اليسار (بدءًا منصفر والانتهاء عند23 هنا) و e هو الأس (1 في هذا المثال).

قد يُشترط أن يكون الرقم الأكثر أهمية في الجزء الدال من عدد غير صفري غير صفري (إلا إذا كان الأس المقابل أصغر من الأس الأدنى). تُسمى هذه العملية بالتطبيع . بالنسبة للصيغ الثنائية (التي تستخدم الأرقام فقط)صفر و1 )، هذا الرقم غير الصفري بالضرورة1. لذلك، لا يلزم تمثيلها في الذاكرة، مما يسمح للتنسيق بالحصول على بت إضافي من الدقة. تُعرف هذه القاعدة بأسماء مختلفة، منها اصطلاح البت الرائد ، واصطلاح البت الضمني ، واصطلاح البت المخفي ، [ 1 ] أو اصطلاح البت المفترض .

بدائل للأعداد العشرية

يُعدّ تمثيل الأعداد العشرية الطريقة الأكثر شيوعًا لتمثيل تقريب الأعداد الحقيقية في الحواسيب. ومع ذلك، توجد بدائل أخرى.

  • يستخدم تمثيل النقطة الثابتة عمليات حسابية للأعداد الصحيحة، يتحكم بها برنامجٌ يتبع اصطلاحًا محددًا لموقع الفاصلة الثنائية أو العشرية، على سبيل المثال، 6 بتات أو أرقام من اليمين. تُعدّ الأجهزة اللازمة لمعالجة هذه التمثيلات أقل تكلفة من تلك المستخدمة في تمثيل النقطة العائمة، ويمكن استخدامها أيضًا لإجراء عمليات حسابية عادية للأعداد الصحيحة. يُستخدم تمثيل النقطة الثابتة الثنائية عادةً في تطبيقات خاصة على معالجات مُدمجة تقتصر على العمليات الحسابية للأعداد الصحيحة، بينما يُستخدم تمثيل النقطة الثابتة العشرية بشكل شائع في التطبيقات التجارية.
  • تمثل أنظمة الأعداد اللوغاريتمية (LNSs) العدد الحقيقي باستخدام لوغاريتم قيمته المطلقة وبت الإشارة. يشبه توزيع القيم توزيع الأعداد العشرية، لكن منحنى تحويل القيمة إلى التمثيل ( أي رسم دالة اللوغاريتم) يكون سلسًا (باستثناء الصفر). على عكس حسابات الأعداد العشرية، في نظام الأعداد اللوغاريتمية، يكون الضرب والقسمة والرفع إلى الأسس سهلة التنفيذ، بينما يكون الجمع والطرح معقدين. يُعد حساب مؤشر المستوى (LI وSLI) المتناظر ، الذي ابتكره تشارلز كلينشو وفرانك أولفر وبيتر تيرنر، مخططًا قائمًا على تمثيل لوغاريتمي معمّم .
  • تمثيل الفاصلة العائمة المتدرج ، المستخدم في تنسيقات Unum ، بما في ذلك Posit .
  • بعض الأعداد النسبية البسيطة ( مثل 1/3 و1/10) لا يمكن تمثيلها بدقة في نظام الفاصلة العائمة الثنائي، مهما بلغت دقة التمثيل. استخدام أساس مختلف يسمح بتمثيل بعضها ( مثل 1/10 في نظام الفاصلة العائمة العشري)، لكن الإمكانيات تبقى محدودة. برامج معالجة الأعداد النسبية تمثل الأعداد ككسور ذات بسط ومقام صحيحين، وبالتالي يمكنها تمثيل أي عدد نسبي بدقة. عادةً ما تستخدم هذه البرامج حسابات الأعداد الكبيرة للأعداد الصحيحة الفردية.
  • يُتيح حساب الفترات تمثيل الأعداد كفترات والحصول على حدود مضمونة للنتائج. وهو يعتمد عمومًا على أنواع أخرى من الحساب، ولا سيما الحساب العشري.
  • تستطيع أنظمة الجبر الحاسوبي مثل Mathematica و Maxima و Maple التعامل غالبًا مع الأعداد غير النسبية مثلπ{\displaystyle \pi }أو3{\displaystyle {\sqrt {3}}}بطريقة "رسمية" تمامًا ( حساب رمزي )، دون التعامل مع ترميز محدد للمعامل. يمكن لمثل هذا البرنامج تقييم تعبيرات مثل "الخطيئة(3π){\displaystyle \sin(3\pi )}"بالضبط، لأنه مبرمج لمعالجة العمليات الرياضية الأساسية مباشرة، بدلاً من استخدام قيم تقريبية لكل عملية حسابية وسيطة."

تاريخ

نشر ليوناردو توريس كويفيدو ، في عام 1914، تحليلًا للنقطة العائمة يعتمد على المحرك التحليلي .

في عام 1914، نشر المهندس الإسباني ليوناردو توريس كيفيدو كتاب "مقالات في الأتمتة " [ 9 ] ، حيث صمم آلة حاسبة كهروميكانيكية ذات غرض خاص، مستندًا إلى المحرك التحليلي لتشارلز باباج، ووصف طريقة لتخزين الأرقام العشرية بطريقة متسقة. وذكر أن الأرقام ستُخزن بصيغة أسية كمان×10م{\displaystyle n\times 10^{m}}وقدّم ثلاث قواعد لتنفيذ معالجة متسقة للأعداد العشرية بواسطة الآلات. بالنسبة لتوريس، " سيكون عدد أرقام n ثابتًا دائمًا (مثلًا ستة)، وسيكون الرقم الأول من n من رتبة الأعشار، والثاني من رتبة الأجزاء من مئة، وهكذا، وسيُكتب كل عدد على الصورة: n ; m ". يُظهر التنسيق الذي اقترحه الحاجة إلى جزء دال ثابت الحجم كما هو مستخدم حاليًا لبيانات الأعداد العشرية، مع تحديد موقع الفاصلة العشرية في الجزء الدال بحيث يكون كل تمثيل فريدًا، وكيفية تنسيق هذه الأرقام من خلال تحديد صيغة يمكن إدخالها عبر آلة كاتبة ، كما كان الحال في جهازه الحسابي الكهروميكانيكي عام 1920. [ 10 ] [ 11 ] [ 12 ]

كونراد تسوزه ، مهندس حاسوب Z3 ، الذي يستخدم تمثيلًا ثنائيًا للفاصلة العائمة مكونًا من 22 بت.

في عام 1938، أنجز كونراد تسوزه من برلين جهاز Z1 ، وهو أول حاسوب ميكانيكي ثنائي قابل للبرمجة ؛ [ 13 ] يستخدم هذا الجهاز تمثيلًا ثنائيًا للأعداد العشرية ذات 24 بت، مع أسٍّ مُوَقَّع من 7 بت، وجزءٍ دالٍّ من 17 بت (بما في ذلك بت ضمني واحد)، وبت إشارة. [ 14 ] أما جهاز Z3 الأكثر موثوقية ، والذي يعتمد على المرحلات ، والذي أُنجز في عام 1941، فيحتوي على تمثيلات لكلٍّ من اللانهاية الموجبة والسالبة؛ وعلى وجه الخصوص، يُنفِّذ عمليات مُحدَّدة مع اللانهاية، مثل القسمة على اللانهاية ، حيث1/=0{\displaystyle 1/\infty =0}ويتوقف عند العمليات غير المحددة، مثل0×{\displaystyle 0\times \infty }.

اقترح زوس أيضًا، لكنه لم يكمل، حسابات الفاصلة العائمة ذات التقريب الدقيق والتي تتضمن±{\displaystyle \pm \infty }وتمثيلات NaN، التي سبقت خصائص معيار IEEE بأربعة عقود. [ 15 ] في المقابل، أوصى فون نيومان بعدم استخدام الأرقام ذات الفاصلة العائمة في آلة IAS لعام 1951 ، بحجة أن الحساب ذي الفاصلة الثابتة أفضل. [ 15 ]

كان أول حاسوب تجاري مزود بأجهزة الفاصلة العائمة هو حاسوب Z4 من تصميم زوس ، والذي تم تصميمه في الفترة ما بين 1942 و1945. وفي عام 1946، قدمت مختبرات بيل النموذج  الخامس ، الذي نفذ أرقام الفاصلة العائمة العشرية . [ 16 ]

يستخدم جهاز Pilot ACE نظام الحساب الثنائي ذي الفاصلة العائمة، وقد بدأ تشغيله عام 1950 في المختبر الفيزيائي الوطني بالمملكة المتحدة . تم بيع 33 جهازًا منه لاحقًا تجاريًا تحت اسم English Electric DEUCE . يُنفذ الحساب فعليًا بواسطة برمجيات، ولكن مع معدل تردد ساعة يبلغ 1 ميجاهرتز، كانت سرعة عمليات الفاصلة العائمة والثابتة في هذا الجهاز أسرع في البداية من سرعة العديد من أجهزة الكمبيوتر المنافسة.

في عام 1954، ظهر جهاز IBM 704 الذي تم إنتاجه بكميات كبيرة ، والذي أدخل استخدام الأس المتحيز . ولعقود طويلة بعد ذلك، كانت أجهزة الفاصلة العائمة ميزة اختيارية في الغالب، وكانت الحواسيب التي تحتوي عليها تُسمى "حواسيب علمية"، أو ذات قدرة " حساب علمي " (انظر أيضًا ملحقات الحساب العلمي (XSC)). ولم تُصبح أجهزة الحاسوب الشخصية للأغراض العامة مزودة بقدرة الفاصلة العائمة كميزة قياسية إلا مع إطلاق معالج Intel i486 في عام 1989 .

دعمت سلسلة UNIVAC 1100/2200 ، التي تم طرحها في عام 1962، تمثيلين للفاصلة العائمة:

  • الدقة الفردية : 36 بت، منظمة على شكل إشارة من بت واحد، وأس من 8 بت، وجزء دال من 27 بت.
  • الدقة المزدوجة : 72 بت، منظمة على شكل إشارة من بت واحد، وأس من 11 بت، وجزء دال من 60 بت.

كان جهاز IBM 7094 ، الذي طُرح أيضًا عام 1962، يدعم تمثيلات أحادية وثنائية الدقة، ولكن دون أي صلة بتمثيلات جهاز UNIVAC. في الواقع، في عام 1964، قدمت IBM تمثيلات الفاصلة العائمة السداسية عشرية في حواسيبها المركزية System/360 ؛ ولا تزال هذه التمثيلات متاحة للاستخدام في أنظمة z/Architecture الحديثة . في عام 1998، طبقت IBM حسابات الفاصلة العائمة الثنائية المتوافقة مع معيار IEEE في حواسيبها المركزية؛ وفي عام 2005، أضافت IBM أيضًا حسابات الفاصلة العائمة العشرية المتوافقة مع معيار IEEE.

في البداية، استخدمت الحواسيب العديد من طرق تمثيل الأرقام العشرية. وبحلول أوائل سبعينيات القرن الماضي، شكّل غياب التوحيد القياسي على مستوى الحواسيب المركزية مشكلةً مستمرةً لمطوري ومطوري البرامج عالية المستوى؛ إذ اختلفت معايير الأرقام العشرية المصنّعة من حيث حجم الكلمات، وطرق التمثيل، وسلوك التقريب، والدقة العامة للعمليات. وبحلول أوائل ثمانينيات القرن الماضي، كانت الحاجة ماسة إلى توحيد معايير توافق الأرقام العشرية بين أنظمة الحوسبة المتعددة، مما أدى إلى وضع معيار IEEE 754 بعد أن أصبح استخدام الكلمات ذات 32 بت (أو 64 بت) شائعًا. وقد استند هذا المعيار بشكل كبير إلى اقتراح من شركة إنتل، التي كانت تصمم المعالج المساعد العددي i8087 ؛ كما ساهمت شركة موتورولا، التي كانت تصمم المعالج 68000 في نفس الفترة تقريبًا، بشكل كبير في هذا المعيار.

ويليام كاهان ، كبير مهندسي معيار IEEE 754 للفاصلة العائمة

في عام 1989، تم تكريم عالم الرياضيات وعالم الكمبيوتر ويليام كاهان بجائزة تورينج لكونه المهندس الرئيسي وراء هذا الاقتراح؛ وقد ساعده في ذلك طالبه جيروم كونين والأستاذ الزائر هارولد ستون . [ 17 ]

من بين ابتكارات x86 (وتحديداً i8087) ما يلي:

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

ستُورَث هذه الميزات إلى معيار IEEE 754-1985 (باستثناء ترميز القيم الخاصة والاستثناءات)، مع العلم أن الدقة الداخلية الموسعة لمعالج x87 تتطلب تقريبًا صريحًا للنتائج الدقيقة مباشرةً إلى دقة الوجهة لمطابقة نتائج معيار IEEE 754. [ 18 ] ومع ذلك، قد لا يكون السلوك مماثلاً للتقريب إلى تنسيق الوجهة نظرًا لاحتمالية اتساع نطاق الأسس في التنسيق الموسع.

نطاق الأرقام العشرية

يتكون العدد ذو الفاصلة العائمة من عنصرين ثابتين ، يعتمد مداهما حصراً على عدد البتات أو الأرقام في تمثيلهما. وبينما يعتمد مدى كل عنصر خطياً على مداه، فإن مدى العدد ذي الفاصلة العائمة يعتمد خطياً على مدى الجزء ذي الدلالة، وأسّياً على مدى الجزء الأسي، مما يمنح العدد مدىً أوسع بكثير.

في نظام حاسوبي نموذجي، يتكون العدد العشري الثنائي ذو الدقة المزدوجة (64 بت) من معامل مكون من 53 بت (بما في ذلك بت واحد ضمني)، وأس مكون من 11 بت، وبت واحد للإشارة. وبما أن 2^ 10 = 1024، فإن النطاق الكامل للأعداد العشرية الموجبة العادية بهذا الشكل يتراوح من 2^ -1022  2  ×  10^ -308 إلى 2^ 1024  2  ×  10^ 308 تقريبًا .

عدد الأعداد العشرية العادية في نظام ( B ، P ، L ، U ) حيث

  • B هي قاعدة النظام،
  • P هي دقة الجزء الدال (في الأساس B
  • L هو أصغر أس في النظام،
  • U هو أكبر أس للنظام،

يكون2(ب-1)(بP-1)(يو-ل+1){\displaystyle 2\left(B-1\right)\left(B^{P-1}\right)\left(U-L+1\right)}، أو2(ب-1)(بP-1)(يو-ل+1)+1{\displaystyle 2\left(B-1\right)\left(B^{P-1}\right)\left(U-L+1\right)+1}مع الأخذ في الاعتبار القيمة 0.

يوجد أصغر عدد عشري موجب عادي،

مستوى التدفق السفلي = UFL =بل{\displaystyle B^{L}}،

والذي يحتوي على الرقم 1 كرقم رئيسي و0 للأرقام المتبقية من الجزء الدال، وأصغر قيمة ممكنة للأس.

يوجد أكبر عدد عشري،

مستوى الفائض = OFL =(1-ب-P)(بيو+1){\displaystyle \left(1-B^{-P}\right)\left(B^{U+1}\right)}،

والتي يكون فيها B − 1 كقيمة لكل رقم من أرقام الجزء الدال وأكبر قيمة ممكنة للأس.

بالإضافة إلى ذلك، توجد قيم قابلة للتمثيل تقع حصراً بين -UFL و UFL. وهي الأصفار الموجبة والسالبة ، فضلاً عن الأعداد دون الطبيعية .

معيار IEEE 754: الفاصلة العائمة في الحواسيب الحديثة

قامت مؤسسة مهندسي الكهرباء والإلكترونيات (IEEE) بتوحيد تمثيل الأعداد العشرية الثنائية في الحاسوب ضمن معيار IEEE 754 (المعروف أيضًا باسم IEC 60559) عام 1985. ويُعتمد هذا المعيار الأول في معظم الحواسيب الحديثة، وقد نُقّح عام 2008. تدعم الحواسيب المركزية من IBM تنسيق الأعداد العشرية السداسية عشرية الخاص بها ، بالإضافة إلى تنسيق IEEE 754-2008 العشري ، إلى جانب التنسيق الثنائي. كانت سلسلة Cray T90 مزودة بنسخة IEEE، بينما لا يزال طراز SV1 يستخدم تنسيق Cray للأعداد العشرية.

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

  • الدقة المفردة (binary32)، تُستخدم عادةً لتمثيل نوع البيانات "float" في عائلة لغات البرمجة C. هذا تنسيق ثنائي يشغل 32 بت (4 بايت) ودقة الجزء ذي الدلالة فيه 24 بت (حوالي 7 أرقام عشرية).
  • الدقة المزدوجة (binary64)، تُستخدم عادةً لتمثيل نوع البيانات "double" في عائلة لغات البرمجة C. هذا تنسيق ثنائي يشغل 64 بت (8 بايت) ودقة الجزء ذي الدلالة فيه 53 بت (حوالي 16 رقمًا عشريًا).
  • يُطلق على تنسيق Double Extended أيضًا اسم "الدقة الموسعة". وهو تنسيق ثنائي يشغل 79 بتًا على الأقل (80 بتًا في حال عدم استخدام قاعدة البتات المخفية/الضمنية)، ويبلغ دقة الجزء ذي الدلالة فيه 64 بتًا على الأقل (حوالي 19 رقمًا عشريًا). توصي معايير C99 و C11 لعائلة لغة C، في الملحق F ("IEC 60559 للحسابات ذات الفاصلة العائمة")، بتوفير هذا التنسيق الموسع باسم " long double ". [ 19 ] يوفر معمارية x86 تنسيقًا يفي بالحد الأدنى من المتطلبات (دقة الجزء ذي الدلالة 64 بتًا، وأس 15 بتًا، وبالتالي يتناسب مع 80 بتًا) . غالبًا ما يمكن استخدام هذا التنسيق مع "long double" على هذه المعالجات، على الرغم من أن الدقة الموسعة غير متوفرة مع MSVC. [ 20 ] ولأغراض المحاذاة ، تخزن العديد من الأدوات هذه القيمة ذات الـ 80 بتًا في مساحة 96 بتًا أو 128 بتًا. [ 21 ] [ 22 ] في المعالجات الأخرى، قد يشير مصطلح "long double" إلى تنسيق أكبر، مثل الدقة الرباعية، [ 23 ] أو ببساطة الدقة المزدوجة، إذا لم يكن أي شكل من أشكال الدقة الموسعة متاحًا. [ 24 ]

تؤدي زيادة دقة تمثيل الفاصلة العائمة عمومًا إلى تقليل مقدار خطأ التقريب المتراكم الناتج عن العمليات الحسابية الوسيطة. [ 25 ] تشمل تنسيقات IEEE الأخرى ما يلي:

يمكن تمثيل أي عدد صحيح ذي قيمة مطلقة أقل من 2^ 24 بدقة تامة باستخدام تنسيق الدقة المفردة، كما يمكن تمثيل أي عدد صحيح ذي قيمة مطلقة أقل من 2^ 53 بدقة تامة باستخدام تنسيق الدقة المزدوجة. علاوة على ذلك، يمكن تمثيل نطاق واسع من قوى العدد 2. تُستخدم هذه الخصائص أحيانًا مع البيانات العددية البحتة، للحصول على أعداد صحيحة من 53 بت على المنصات التي تدعم الأعداد العشرية ذات الدقة المزدوجة ولكنها تدعم فقط الأعداد الصحيحة من 32 بت.

يحدد المعيار بعض القيم الخاصة، وتمثيلها: اللانهاية الموجبة ( +∞ )، واللانهاية السالبة ( −∞والصفر السالب (−0) المتميز عن الصفر العادي ("الموجب")، وقيم "ليست عددًا" ( NaNs ).

تختلف مقارنة الأعداد العشرية، وفقًا لمعيار IEEE، قليلًا عن مقارنة الأعداد الصحيحة المعتادة. فالصفر السالب والصفر الموجب متساويان في المقارنة، بينما لا يتساوى أي عدد NaN مع أي قيمة أخرى، بما في ذلك نفسه. جميع الأعداد العشرية المحدودة أصغر من +∞ وأكبر من −∞ ، وهي مرتبة بنفس ترتيب قيمها (في مجموعة الأعداد الحقيقية).

التمثيل الداخلي

تُخزَّن الأعداد العشرية عادةً في بيانات الحاسوب على شكل بت الإشارة، وحقل الأس، وحقل الجزء الكسري، من اليسار إلى اليمين. أما بالنسبة لتنسيقات IEEE 754 الثنائية (الأساسية والموسعة) التي لها تطبيقات برمجية موجودة، فيتم توزيعها على النحو التالي:

شكلبتات للترميزتحيز الأسدقة البتاتعدد الأرقام العشرية
لافتةالأسالمهمالمجموع
نصف (ثنائي 16)15101615113.3 تقريبًا
مفرد (ثنائي 32 بت)182332127247.2 تقريبًا
مزدوج (ثنائي 64 بت)111526410235315.9 تقريبًا
x86 ممتد1156480163836419.2 تقريبًا
رباعي (ثنائي 128)1151121281638311334.0 تقريبًا
ثماني (ثنائي 256)11923625626214323771.3 تقريبًا

بينما يمكن أن يكون الأس موجبًا أو سالبًا، يُخزَّن في النظام الثنائي كرقم غير مُوَقَّع مُضاف إليه "انحياز" ثابت. تُخصَّص جميع الأصفار في هذا الحقل للأصفار والأعداد غير الطبيعية ؛ وتُخصَّص جميع الآحاد للقيم اللانهائية وNaN. يتراوح نطاق الأس للأعداد الطبيعية بين [−126, 127] للدقة المفردة، و[−1022, 1023] للدقة المزدوجة، و[−16382, 16383] للدقة الرباعية. لا تشمل الأعداد الطبيعية القيم غير الطبيعية، والأصفار، والقيم اللانهائية، وNaN.

في تنسيقات التبادل الثنائي IEEE، لا تُخزَّن البتة الأولى من الجزء الكسري المُعَيَّر في بيانات الحاسوب، لأنها دائمًا تساوي 1. تُسمى هذه البتة "البتة المخفية" أو "البتة الضمنية". ولهذا السبب، يحتوي تنسيق الدقة المفردة على جزء كسري بدقة 24 بت، وتنسيق الدقة المزدوجة على 53 بت، وتنسيق الدقة الرباعية على 113 بت، وتنسيق الدقة الثمانية على 237 بت.

على سبيل المثال، تم توضيح أعلاه أن قيمة π، بعد تقريبها إلى دقة 24 بت، لها:

  • sign = 0  ; e = 1  ; s = 110010010000111111011011 (بما في ذلك البت المخفي)

مجموع انحياز الأس (127) والأس (1) يساوي 128، لذا يتم تمثيل ذلك بصيغة الدقة المفردة على النحو التالي:

مثال على تخطيط الفاصلة العائمة 32 بت هو

والتخطيط ذو 64 بت ("مزدوج") مشابه.

تنسيقات أخرى بارزة للأرقام العشرية

بالإضافة إلى تنسيقات معيار IEEE 754 المستخدمة على نطاق واسع ، يتم استخدام تنسيقات أخرى للفاصلة العائمة، أو تم استخدامها، في مجالات معينة خاصة بالمجال.

  • طُوِّر تنسيق مايكروسوفت الثنائي (MBF) لمنتجات لغة مايكروسوفت بيسك، بما في ذلك أول منتج لمايكروسوفت على الإطلاق، ألتاير بيسك (1975)، وTRS-80 LEVEL II ، و MBASIC لنظام CP/M ، و BASICA لجهاز IBM PC 5150 ، و GW-BASIC لنظام MS-DOS ، و QuickBASIC قبل الإصدار 4.00. انتقل الإصداران 4.00 و4.50 من QuickBASIC إلى تنسيق IEEE 754-1985، ولكن يمكن العودة إلى تنسيق MBF باستخدام خيار الأمر /MBF. صُمِّمَ تنسيق MBF وطُوِّرَ على جهاز محاكاة Intel 8080 بواسطة مونتي دافيدوف ، زميل بيل غيتس في السكن الجامعي، خلال ربيع عام 1975 لجهاز MITS Altair 8800 . دعم الإصدار الأولي في يوليو 1975 تنسيقًا أحادي الدقة (32 بت) نظرًا لتكلفة ذاكرة MITS Altair 8800 ذات سعة 4 كيلوبايت. وفي ديسمبر 1975، أضاف الإصدار ذو سعة 8 كيلوبايت تنسيقًا مزدوج الدقة (64 بت). وتم اعتماد تنسيق أحادي الدقة (40 بت) لوحدات المعالجة المركزية الأخرى، ولا سيما MOS 6502 ( Apple II ، Commodore PET ، Atari )، و Motorola 6800 (MITS Altair 680)، و Motorola 6809 ( TRS-80 Color Computer ). استخدمت جميع منتجات مايكروسوفت اللغوية من عام 1975 حتى عام 1987 تنسيق مايكروسوفت الثنائي، إلى أن اعتمدت مايكروسوفت معيار IEEE 754 في جميع منتجاتها بدءًا من عام 1988 وحتى إصداراتها الحالية. يتكون MBF من تنسيق MBF أحادي الدقة (32 بت، "6 أرقام BASIC")، [ 29 ] [ 30 ] وتنسيق MBF ذو الدقة الموسعة (40 بت، "9 أرقام BASIC")، [ 30 ] وتنسيق MBF مزدوج الدقة (64 بت)؛ [ 29 ] [ 31 ] يتم تمثيل كل منها بمعامل أس 8 بت، متبوعًا ببت إشارة، متبوعًا بجزء دال مكون من 23 و31 و55 بت على التوالي.
  • يتطلب تنسيق bfloat16 نفس مقدار الذاكرة (16 بت) الذي يتطلبه تنسيق IEEE 754 بنصف الدقة ، ولكنه يخصص 8 بتات للأس بدلاً من 5، مما يوفر نفس نطاق عدد IEEE 754 أحادي الدقة . ويكمن المقابل في انخفاض الدقة، حيث يتم تقليص حقل المعامل الدال من 10 إلى 7 بتات. يُستخدم هذا التنسيق بشكل أساسي في تدريب نماذج التعلم الآلي ، حيث يكون النطاق أكثر أهمية من الدقة. وتوفر العديد من مُسرّعات التعلم الآلي دعمًا ماديًا لهذا التنسيق.
  • يجمع تنسيق TensorFloat-32 [ 32 ] بين 8 بتات من أسّ bfloat16 و10 بتات من حقل المعامل اللاحق لتنسيقات نصف الدقة، مما ينتج عنه حجم 19 بت. وقد قدمت شركة Nvidia هذا التنسيق ، وتوفر دعمًا ماديًا له في نوى Tensor الخاصة بوحدات معالجة الرسومات (GPUs) المبنية على معمارية Nvidia Ampere. يُعدّ حجم هذا التنسيق، الذي لا يُمثّل قوة للعدد 2، عيبًا. ومع ذلك، وفقًا لشركة Nvidia، يجب استخدام هذا التنسيق داخليًا فقط بواسطة الأجهزة لتسريع العمليات الحسابية، بينما يجب تخزين المدخلات والمخرجات بتنسيق IEEE 754 أحادي الدقة ذي 32 بت. [ 32 ]
  • توفر وحدات معالجة الرسومات (GPUs) ذات بنية Hopper و CDNA 3 صيغتين من نوع FP8: إحداهما بنفس النطاق العددي لنصف الدقة (E5M2)، والأخرى بدقة أعلى ولكن بنطاق أقل (E4M3). [ 33 ] [ 34 ]
  • تتضمن بنية معالجات الرسوميات Blackwell و CDNA 4 دعمًا لتنسيقات FP6 (E3M2 وE2M3) وFP4 (E2M1). يُعد FP4 أصغر تنسيق للفاصلة العائمة، وهو يدعم جميع مبادئ IEEE 754 (انظر minifloat ) .
مقارنة بين تنسيقات الفاصلة العائمة الشائعة
يكتبلافتةالأسالمهمإجمالي البتات
FP41214
FP6 (E2M3)1236
FP6 (E3M2)1326
FP8 (E4M3)1438
FP8 (E5M2)1528
نصف الدقة151016
bfloat1618716
TensorFloat-32181019
دقة واحدة182332
دقة مزدوجة1115264
دقة رباعية115112128
دقة ثمانية أضعاف119236256

الأعداد القابلة للتمثيل، والتحويل، والتقريب

بطبيعتها، جميع الأعداد المكتوبة بصيغة الفاصلة العائمة هي أعداد نسبية ذات تمثيل منتهٍ في الأساس ذي الصلة (على سبيل المثال، تمثيل عشري منتهٍ في الأساس 10، أو تمثيل ثنائي منتهٍ في الأساس 2). أما الأعداد غير النسبية، مثل π أو2{\textstyle {\sqrt {2}}}يجب تقريب الأعداد النسبية غير المنتهية. كما أن عدد خانات (أو بتات) الدقة يحد من مجموعة الأعداد النسبية التي يمكن تمثيلها بدقة. على سبيل المثال، لا يمكن تمثيل العدد العشري 123456789 بدقة إذا توفرت ثمانية خانات عشرية فقط (سيتم تقريبه إلى إحدى القيمتين القابلتين للتمثيل، 12345678  ×  10⁻¹ أو 12345679 × 10⁻¹ ) ، وينطبق الأمر نفسه على الخانات غير المنتهية ( سيتم تقريب 0.5 إلى 0.55555555 أو 0.55555556 ).  

عندما يُمثَّل عددٌ ما بصيغةٍ (مثل سلسلة نصية) لا تُمثِّل تمثيلاً أصلياً للأعداد العشرية مدعوماً في نظام الحاسوب، فإنه يتطلب تحويلاً قبل استخدامه في ذلك النظام. إذا أمكن تمثيل العدد بدقةٍ تامةٍ بصيغة الأعداد العشرية، يكون التحويل دقيقاً. أما إذا لم يكن هناك تمثيل دقيق، فيتطلب التحويل اختيار عدد عشري مُناسب لتمثيل القيمة الأصلية. سيكون للتمثيل المُختار قيمةٌ مختلفةٌ عن القيمة الأصلية، وتُسمى القيمة المُعدَّلة بالقيمة المُقرَّبة .

يعتمد وجود تمثيل منتهٍ للعدد النسبي على أساس النظام. ففي النظام العشري (الأساس 10)، يكون تمثيل العدد 1/2 منتهيًا (0.5)، بينما لا يكون تمثيل العدد 1/3 منتهيًا (0.333...). أما في النظام الثنائي (الأساس 2)، فلا تكون الأعداد النسبية منتهية إلا إذا كان مقامها من قوى العدد 2 (مثل 1/2 أو 3/16). أي عدد نسبي مقامه يحتوي على عامل أولي غير 2 يكون تمثيله الثنائي غير منتهٍ. هذا يعني أن الأعداد التي تبدو قصيرة ودقيقة عند كتابتها بالصيغة العشرية قد تحتاج إلى تقريب عند تحويلها إلى نظام الفاصلة العائمة الثنائي. على سبيل المثال، لا يمكن تمثيل العدد العشري 0.1 بنظام الفاصلة العائمة الثنائي ذي الدقة المحدودة؛ إذ سيكون تمثيله الثنائي الدقيق عبارة عن سلسلة "1100" تستمر بلا نهاية.

ه = −4؛ ق = 1100110011001100110011001100110011...,

حيث، كما في السابق، s هو الجزء الدال و e هو الأس.

عند تقريبها إلى 24 بت، تصبح

ه = −4؛ ق = 110011001100110011001101،

وهو في الواقع 0.100000001490116119384765625 بالصيغة العشرية.

كمثال آخر، العدد الحقيقي π ، المُمثَّل في النظام الثنائي كسلسلة لانهائية من البتات هو

11.00100100001111110110101000100010000101101000110000100011010011...

لكن

11.0010010000111111011011

عند تقريبها عن طريق التقريب إلى دقة 24 بت.

في نظام الفاصلة العائمة أحادي الدقة الثنائي، يُعبَّر عن هذا بالصيغة s  =  1.10010010000111111011011 حيث e  =  1. وهذه القيمة العشرية هي

3.141592 7410125732421875،

بينما يكون التقريب الأكثر دقة للقيمة الحقيقية لـ π هو

3.14159265358979323846264338327950 ...

تختلف نتيجة التقريب عن القيمة الحقيقية بحوالي 0.03 جزء في المليون، وتتطابق مع التمثيل العشري لـ π في الأرقام السبعة الأولى. هذا الاختلاف هو خطأ التقطيع ، وهو محدود بقيمة إبسيلون الخاصة بالآلة .

يُطلق على الفرق الحسابي بين عددين متتاليين من الأعداد العشرية القابلة للتمثيل، واللذين لهما نفس الأس، اسم " وحدة في الخانة الأخيرة " (ULP). على سبيل المثال، إذا لم يكن هناك عدد قابل للتمثيل يقع بين العددين 1.45A70C22 16 و1.45A70C24 16 ، فإن قيمة ULP هي 2×16⁻⁸ ، أو 2⁻³¹ . بالنسبة للأعداد التي يكون جزء أسها في النظام الثنائي يساوي صفرًا، أي الأعداد التي تكون قيمتها المطلقة أكبر من أو تساوي 1 ولكنها أقل من 2، فإن قيمة ULP تساوي بالضبط 2⁻²³ أو حوالي 10⁻⁷ في الدقة المفردة، وتساوي بالضبط 2⁻⁵³ أو حوالي 10⁻¹⁶ في الدقة المزدوجة. ويُشترط في الأجهزة المتوافقة مع معايير IEEE أن تكون النتيجة ضمن نصف قيمة ULP.

أوضاع التقريب

يُستخدم التقريب عندما تتطلب النتيجة الدقيقة لعملية حسابية ذات فاصلة عائمة (أو تحويلها إلى صيغة الفاصلة العائمة) عددًا من الأرقام يفوق عدد الأرقام في الجزء الكسري. يشترط معيار IEEE 754 التقريب الصحيح : أي أن تكون النتيجة المقربة كما لو تم استخدام حساب دقيق للغاية لحساب القيمة ثم تقريبها (مع أن التطبيق العملي لا يتطلب سوى ثلاث بتات إضافية لضمان ذلك). توجد عدة طرق مختلفة للتقريب . تاريخيًا، كان الاقتطاع هو الأسلوب المعتاد. منذ إدخال معيار IEEE 754، أصبح الأسلوب الافتراضي ( التقريب إلى أقرب عدد صحيح، وفي حالة التعادل إلى عدد زوجي ، ويُسمى أحيانًا تقريب المصرفيين) أكثر شيوعًا. يقوم هذا الأسلوب بتقريب النتيجة المثالية (الدقيقة للغاية) للعملية الحسابية إلى أقرب قيمة قابلة للتمثيل، ويُعطي هذا التمثيل كنتيجة. [ ملاحظة 8 ] في حالة التعادل، يتم اختيار القيمة التي تجعل الجزء الكسري ينتهي برقم زوجي. يشترط معيار IEEE 754 تطبيق نفس التقريب على جميع العمليات الجبرية الأساسية، بما في ذلك الجذر التربيعي والتحويلات، عند وجود نتيجة عددية (غير NaN). وهذا يعني أن نتائج عمليات IEEE 754 محددة بالكامل في جميع بتات النتيجة، باستثناء تمثيل NaN. (لا يُشترط استخدام دوال المكتبة مثل جيب التمام واللوغاريتم).

تتوفر أيضًا خيارات تقريب بديلة. يحدد معيار IEEE 754 أوضاع التقريب التالية:

  • التقريب إلى أقرب رقم، وفي حالة التعادل يتم التقريب إلى أقرب رقم زوجي في الموضع المطلوب (الوضع الافتراضي والأكثر شيوعًا إلى حد بعيد).
  • التقريب إلى أقرب عدد صحيح، وفي حالة التعادل يتم التقريب بعيدًا عن الصفر (اختياري للأعداد العشرية الثنائية ويستخدم بشكل شائع في النظام العشري).
  • التقريب لأعلى (باتجاه +∞؛ وبالتالي يتم تقريب النتائج السالبة باتجاه الصفر)
  • التقريب إلى الأسفل (باتجاه −∞؛ وبالتالي فإن النتائج السالبة تقرب بعيدًا عن الصفر)
  • التقريب نحو الصفر (التقريب؛ وهو مشابه للسلوك الشائع لتحويلات الأعداد العشرية إلى أعداد صحيحة، والتي تحول -3.9 إلى -3 و3.9 إلى 3)

تُعدّ الأنماط البديلة مفيدةً عندما يكون من الضروري تحديد مقدار الخطأ المُدخل. ومن التطبيقات التي تتطلب خطأً محدودًا: الحسابات العشرية متعددة الدقة، وحسابات الفترات . كما تُفيد أنماط التقريب البديلة في تشخيص عدم الاستقرار العددي: فإذا تباينت نتائج روتين فرعي بشكلٍ كبير بين التقريب إلى + و - ما لا نهاية، فمن المرجح أن يكون غير مستقر عدديًا ومتأثرًا بخطأ التقريب. [ 35 ]

تحويل من النظام الثنائي إلى النظام العشري بأقل عدد ممكن من الأرقام

يُعدّ تحويل عدد ثنائي ذي دقة مزدوجة إلى سلسلة عشرية عملية شائعة، لكن لم تظهر خوارزمية تُنتج نتائج دقيقة ومختصرة في آنٍ واحد حتى عام 1990، مع برنامج Dragon4 لستيل ووايت. ومن بين التحسينات التي طرأت منذ ذلك الحين:

  • dtoa.c الخاص بـ David M. Gay هو تطبيق عملي مفتوح المصدر للعديد من الأفكار في Dragon4. [ 36 ]
  • يُحسّن Grisu3 السرعة بمقدار 4 أضعاف لأنه يُلغي استخدام الأعداد الكبيرة . يجب استخدامه مع خيار احتياطي، لأنه يفشل في حوالي 0.5% من الحالات. [ 37 ]
  • Errol3، خوارزمية ناجحة دائمًا تشبه خوارزمية Grisu3، ولكنها أبطأ منها. ويبدو أنها ليست بجودة خوارزمية Grisu التي تنتهي مبكرًا مع خيار التراجع. [ 38 ]
  • Ryū، خوارزمية ناجحة دائمًا وهي أسرع وأبسط من Grisu3. [ 39 ]
  • خوارزمية شوبفاخ، وهي خوارزمية ناجحة دائمًا، تعتمد على فكرة مشابهة لخوارزمية ريو، وقد طُوّرت بشكل شبه متزامن ومستقل. [ 40 ] وتتفوق على خوارزميتي ريو وغريسو3 في بعض الاختبارات المعيارية. [ 41 ]

تستخدم العديد من بيئات تشغيل اللغات الحديثة Grisu3 مع Dragon4 كخيار احتياطي. [ 42 ]

تحويل النظام العشري إلى النظام الثنائي

تُعدّ مشكلة تحليل سلسلة عشرية إلى تمثيل ثنائي ذي عدد عشري مشكلة معقدة، ولم يظهر محلل دقيق لها إلا في عمل كلينجر عام 1990 (المُنفّذ في dtoa.c). [ 36 ] وقد أحرزت أعمال لاحقة تقدماً مماثلاً في اتجاه التحليل الأسرع. [ 43 ]

عمليات الفاصلة العائمة

لتبسيط العرض والفهم، سيتم استخدام نظام العد العشري بدقة 7 أرقام في الأمثلة، كما هو الحال في تنسيق IEEE 754 decimal32 . تبقى المبادئ الأساسية نفسها بغض النظر عن نظام العد أو الدقة، باستثناء أن التطبيع اختياري (فهو لا يؤثر على القيمة العددية للنتيجة). هنا، يرمز s إلى الجزء الدال، ويرمز e إلى الأس.

الجمع والطرح

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

 123456.7 = 1.234567 × 10^5 101.7654 = 1.017654 × 10^2 = 0.001017654 × 10^5
 لذلك: 123456.7 + 101.7654 = (1.234567 × 10^5) + (1.017654 × 10^2) = (1.234567 × 10^5) + (0.001017654 × 10^5) = (1.234567 + 0.001017654) × 10^5 = 1.235584654 × 10^5

بالتفصيل:

 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)

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

 ه = 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 (بعد التقريب والتطبيع)

في الأمثلة المفاهيمية المذكورة أعلاه، يبدو أن الجامع يحتاج إلى توفير عدد كبير من الأرقام الإضافية لضمان التقريب الصحيح؛ ومع ذلك، في عمليات الجمع أو الطرح الثنائية، وباستخدام تقنيات تنفيذ دقيقة، لا يلزم سوى بت حماية ، وبت تقريب ، وبت إضافي واحد للتثبيت، وذلك بعد تجاوز دقة المعاملات. [ 18 ] [ 44 ] : 218-220

تظهر مشكلة أخرى تتمثل في فقدان الدلالة عند طرح قيم تقريبية لعددين متساويين تقريبًا. في المثال التالي ، 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 في التقريبات. في الحالات القصوى، قد تُفقد جميع الأرقام المعنوية للدقة. [ 18 ] [ 45 ] يوضح هذا الحذف خطورة افتراض أن جميع أرقام النتيجة المحسوبة ذات معنى. يُعد التعامل مع عواقب هذه الأخطاء موضوعًا في التحليل العددي ؛ انظر أيضًا مشاكل الدقة .

الضرب والقسمة

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

 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 (بعد التطبيع)

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

لا توجد مشاكل إلغاء أو امتصاص في عمليات الضرب أو القسمة، مع أن أخطاءً صغيرة قد تتراكم عند تنفيذ العمليات بالتتابع. [ 18 ] عمليًا، قد تكون طريقة تنفيذ هذه العمليات في المنطق الرقمي معقدة للغاية (انظر خوارزمية بوث للضرب وخوارزمية القسمة ). [ ملاحظة 9 ]

بناء الجملة الحرفي

تختلف القيم الحرفية للأعداد العشرية باختلاف لغات البرمجة. وعادةً ما تُستخدم ` ex` أو `y` Eللدلالة على الترميز العلمي . كما تُعرّف لغة البرمجة C ومعيار IEEE 754 صيغةً حرفيةً سداسية عشرية بأسّ أساسه 2 بدلاً من 10. في لغات مثل C ، عند حذف الأسّ العشري، يلزم وجود فاصلة عشرية للتمييز بينها وبين الأعداد الصحيحة. لا تحتوي لغات أخرى على نوع بيانات للأعداد الصحيحة (مثل JavaScript )، أو تسمح بتحميل أنواع البيانات العددية بشكل زائد (مثل Haskell ). في هذه الحالات، قد تكون سلاسل الأرقام، مثل `x`، 123قيمًا حرفيةً للأعداد العشرية.

أمثلة على القيم الحرفية ذات الفاصلة العائمة هي:

  • 99.9
  • -5000.12
  • 6.02e23
  • -3e-45
  • 0x1.fffffep+127في لغة C و IEEE 754

التعامل مع الحالات الاستثنائية

قد تواجه عمليات الحساب باستخدام الفاصلة العائمة في الحاسوب ثلاثة أنواع من المشاكل:

  • يمكن أن تكون العملية غير معرفة رياضياً، مثل ∞/∞، أو القسمة على صفر .
  • يمكن أن تكون العملية قانونية من حيث المبدأ، ولكنها غير مدعومة بالصيغة المحددة، على سبيل المثال، حساب الجذر التربيعي لـ -1 أو الجيب العكسي لـ 2 (وكلاهما ينتج عنه أعداد مركبة ).
  • قد تكون العملية صحيحة من حيث المبدأ، لكن النتيجة قد تكون مستحيلة التمثيل بالصيغة المحددة، لأن الأس كبير جدًا أو صغير جدًا بحيث لا يمكن ترميزه في حقل الأس. يُطلق على هذه الحالة اسم تجاوز السعة (أس كبير جدًا)، أو نقص السعة (أس صغير جدًا)، أو فقدان الدقة (فقدان الدقة).

قبل معيار IEEE، كانت هذه الظروف عادةً ما تؤدي إلى إنهاء البرنامج، أو تُفعّل نوعًا من الأخطاء التي قد يتمكن المبرمج من اكتشافها. وكانت آلية عمل ذلك تعتمد على النظام، مما يعني أن برامج الفاصلة العائمة لم تكن قابلة للنقل بين الأنظمة .

يُستخدم مصطلح "الاستثناء" في معيار IEEE 754 بمعنى عام، ويشير إلى حالة استثنائية، لا تُعدّ بالضرورة خطأً، ويختلف استخدامه عن التعريف الشائع في لغات البرمجة مثل C++ أو Java، حيث يُمثّل " الاستثناءArithmeticException " مسارًا بديلًا للتحكم، أقرب إلى ما يُعرف بـ"المصيدة" في مصطلحات IEEE 754. مع ذلك، في هذه اللغات، قد يحدث استثناء في مسار التحكم .

هنا، نناقش الطريقة الافتراضية المطلوبة للتعامل مع الاستثناءات وفقًا لمعيار IEEE 754 (لا نتناول هنا آلية اعتراض الاستثناءات الاختيارية في معيار IEEE 754 وأنماط "التعامل البديل مع الاستثناءات" الأخرى). يُشترط (افتراضيًا) تسجيل الاستثناءات الحسابية في بتات علامة الحالة "الثابتة". وتعني "الثابتة" أنها لا تُعاد ضبطها بواسطة العملية الحسابية التالية، بل تبقى مُفعّلة حتى تتم إعادة ضبطها صراحةً. وبالتالي، يسمح استخدام علامات "الثابتة" بتأجيل اختبار الحالات الاستثنائية إلى ما بعد تنفيذ تعبير أو روتين فرعي كامل للأعداد العشرية: فبدونها، ستتطلب الحالات الاستثنائية التي لا يمكن تجاهلها اختبارًا صريحًا فورًا بعد كل عملية حسابية. افتراضيًا، تُرجع العملية دائمًا نتيجةً وفقًا للمواصفات دون مقاطعة الحساب. على سبيل المثال، تُرجع عملية القسمة على صفر (1/0) القيمة +∞، مع ضبط بت علامة القسمة على صفر (صُممت هذه القيمة الافتراضية ∞ لإرجاع نتيجة محدودة غالبًا عند استخدامها في عمليات لاحقة، وبالتالي يمكن تجاهلها بأمان).

مع ذلك، لم يُوصِ معيار IEEE 754 الأصلي بعملياتٍ لمعالجة مجموعات بتات علامات الاستثناء الحسابي. لذا، ورغم تنفيذها في الأجهزة، لم تُوفر تطبيقات لغات البرمجة في البداية وسيلةً للوصول إليها (باستثناء لغة التجميع). بمرور الوقت، جرى تحديث بعض معايير لغات البرمجة (مثل C99 وC11 وFortran) لتحديد طرق الوصول إلى بتات علامات الحالة وتغييرها. يُحدد إصدار 2008 من معيار IEEE 754 الآن بعض العمليات للوصول إلى بتات علامات الاستثناء الحسابي ومعالجتها. يعتمد نموذج البرمجة على خيط تنفيذ واحد، ويجب معالجة استخدامها من قِبل خيوط متعددة بوسيلة خارج المعيار (مثل C11 التي تُحدد أن العلامات لها تخزين محلي خاص بالخيط ).

يحدد معيار IEEE 754 خمسة استثناءات حسابية يجب تسجيلها في علامات الحالة ("البتات الثابتة"):

  • غير دقيق ، يتم تعيينه إذا كانت القيمة المقربة (والتي يتم إرجاعها) مختلفة عن النتيجة الدقيقة رياضياً للعملية.
  • يتم تعيين underflow إذا كانت القيمة المقربة صغيرة (كما هو محدد في IEEE 754) وغير دقيقة (أو ربما محدودة إذا كان بها فقدان إلغاء التطبيع، وفقًا لإصدار 1985 من IEEE 754)، مما يؤدي إلى إرجاع قيمة دون المستوى الطبيعي بما في ذلك الأصفار.
  • يتم ضبط قيمة تجاوز السعة إذا كانت القيمة المطلقة للقيمة المقربة كبيرة جدًا بحيث لا يمكن تمثيلها. يتم إرجاع قيمة لانهائية أو قيمة محدودة قصوى، وذلك حسب طريقة التقريب المستخدمة.
  • القسمة على صفر ، يتم تعيينها إذا كانت النتيجة لا نهائية بالنظر إلى المعاملات المحدودة، وتعيد قيمة لا نهائية، إما +∞ أو −∞.
  • غير صالح ، يتم تعيينه إذا تعذر إرجاع نتيجة محدودة أو غير محدودة على سبيل المثال sqrt(−1) أو 0/0، مما يؤدي إلى إرجاع NaN صامت.
الشكل 1: المقاومات الموصولة على التوازي، مع المقاومة الكليةRتoت{\displaystyle R_{tot}}

صُممت القيمة الافتراضية المُعادة لكل استثناء من الاستثناءات لإعطاء النتيجة الصحيحة في معظم الحالات، بحيث يمكن تجاهل هذه الاستثناءات في معظم البرامج. يُعيد الاستثناء inexact نتيجة مُقرّبة بشكل صحيح، بينما يُعيد الاستثناء underflow قيمة أقل من أو تساوي أصغر عدد موجب طبيعي من حيث القيمة المطلقة، ويمكن تجاهله في معظم الحالات. [ 46 ] يُعيد الاستثناء divide-by-zero قيمة اللانهاية تمامًا، والتي عادةً ما تقسم عددًا محدودًا وبالتالي تُعطي صفرًا، أو تُعطي استثناءً غير صالح لاحقًا إذا لم يحدث ذلك، وبالتالي يمكن تجاهله أيضًا في معظم الحالات. على سبيل المثال، تُعطى المقاومة الفعّالة لـ n مقاومة موصولة على التوازي (انظر الشكل 1) بالعلاقة التالية:Rطفل صغير=1/(1/R1+1/R2++1/Rن){\displaystyle R_{\text{tot}}=1/(1/R_{1}+1/R_{2}+\cdots +1/R_{n})}إذا حدث قصر في الدائرة الكهربائية معR1{\displaystyle R_{1}}تم ضبطه على 0،1/R1{\displaystyle 1/R_{1}}سوف تُرجع قيمة +ما لا نهاية، مما سيعطي النتيجة النهائيةRتoت{\displaystyle R_{tot}}من 0، كما هو متوقع [ 47 ] (انظر مثال الكسر المستمر في الأساس المنطقي لتصميم IEEE 754 للحصول على مثال آخر).

لا يمكن عادةً تجاهل حالات تجاوز السعة والاستثناءات غير الصالحة ، ولكنها لا تمثل بالضرورة أخطاءً: على سبيل المثال، قد يقوم روتين البحث عن الجذر ، كجزء من عمله العادي، بتقييم دالة مُمرَّرة عند قيم خارج نطاقها، مما يؤدي إلى إرجاع NaN وعلامة استثناء غير صالحة يتم تجاهلها حتى يتم العثور على نقطة بداية مفيدة. [ 46 ]

مشاكل الدقة

إن عدم قدرة الأعداد العشرية على تمثيل جميع الأعداد الحقيقية بدقة، وعدم قدرة عملياتها على تمثيل العمليات الحسابية الحقيقية بدقة، يؤدي إلى العديد من المواقف غير المتوقعة. ويرتبط هذا بالدقة المحدودة التي تمثل بها الحواسيب الأعداد عمومًا.

على سبيل المثال، لا يمكن تمثيل العددين العشريين 0.1 و0.01 بدقة كأعداد ثنائية ذات فاصلة عائمة. ففي صيغة IEEE 754 الثنائية ذات 32 بت، والتي تحتوي على جزء دال مكون من 24 بت، فإن نتيجة محاولة تربيع العدد التقريبي 0.1 لا تساوي 0.01 ولا أقرب عدد قابل للتمثيل إليه. يُمثل العدد العشري 0.1 في النظام الثنائي بالصيغة التالية: e  =  −4 ; s  =  110011001100110011001101 ، وهو

0.100000001490116119384765625 بالضبط.

تربيع هذا العدد يعطي

0.010000000298023226097399174250313080847263336181640625 بالضبط.

تربيعها مع التقريب إلى دقة 24 بت يعطي

0.010000000707805156707763671875 بالضبط.

لكن الرقم التمثيلي الأقرب إلى 0.01 هو

0.009999999776482582092285156250 بالضبط.

كذلك، فإن عدم إمكانية تمثيل π (وπ/2) يعني أن محاولة حساب tan(π/2) لن تُنتج نتيجة لا نهائية، ولن يحدث تجاوز في صيغ الفاصلة العائمة المعتادة (بافتراض دقة تنفيذ دالة tan). ببساطة، لا يمكن لأجهزة الفاصلة العائمة القياسية محاولة حساب tan(π/2)، لأن π/2 لا يمكن تمثيلها بدقة. هذا الحساب بلغة C:

// عدد كافٍ من الأرقام للتأكد من الحصول على التقريب الصحيح. const double pi = 3.1415926535897932384626433832795 ; double z = tan ( pi / 2.0 );

ستعطي النتيجة 16331239353195370.0. أما في الدقة المفردة (باستخدام tanfالدالة)، فستكون النتيجة -22877332.0.

وبالمثل، فإن محاولة حساب sin(π) لن تُعطي صفرًا. ستكون النتيجة (تقريبًا) 0.1225 × 10⁻¹⁵ بدقة مضاعفة ، أو -0.8742 × 10⁻⁷ بدقة مفردة. [ ملاحظة 10 ]

على الرغم من أن عمليتي الجمع والضرب في الأعداد العشرية تبادليتان ( أ + ب = ب + أ و أ × ب = ب × أ ) ، إلا أنهما ليستا بالضرورة تجميعيتين . أي أن ( أ + ب ) + ج لا يساوي بالضرورة أ + ( ب + ج ) . باستخدام الحساب العشري ذي الأرقام المعنوية السبعة:

أ = 1234.567، ب = 45.67834، ج = 0.0004
(أ + ب) + ج: 1234.567 (أ) + 45.67834 (ب) ____________ 1280.24534 تُقرّب إلى 1280.245
 1280.245 (أ + ب) + 0.0004 (ج) ____________ 1280.2454 تُقرّب إلى 1280.245 ← (أ + ب) + ج
أ + (ب + ج): 45.67834 (ب) + 0.0004 (ج) ____________ 45.67874
 1234.567 (أ) + 45.67874 (ب + ج) ____________ 1280.24574 تُقرّب إلى 1280.246 ← أ + (ب + ج)

كما أنها ليست بالضرورة توزيعية . أي أن ( أ + ب ) × ج قد لا يكون هو نفسه أ × ج + ب × ج .

1234.567 × 3.333333 = 4115.223 1.234567 × 3.333333 = 4.115223 4115.223 + 4.115223 = 4119.338 لكن 1234.567 + 1.234567 = 1235.802 1235.802 × 3.333333 = 4119.340

بالإضافة إلى فقدان الأهمية، وعدم القدرة على تمثيل أرقام مثل π و 0.1 بدقة، وغيرها من الأخطاء الطفيفة، قد تحدث الظواهر التالية:

  • الإلغاء : قد يؤدي طرح عددين متقاربين في القيمة إلى فقدان كبير في الدقة. [ 48 ] [ 45 ] عند طرح عددين متقاربين في القيمة، نُصفّر الأرقام الأكثر أهمية، فنترك فقط الأرقام الأقل أهمية والأكثر خطأً. [ 1 ] : 124 على سبيل المثال، عند حساب مشتقة دالة، تُستخدم الصيغة التالية: سؤال(ح)=و(أ+ح)-و(أ)ح.{\displaystyle Q(h)={\frac {f(a+h)-f(a)}{h}}.} بديهيًا، يُفضّل أن تكون قيمة h قريبة جدًا من الصفر؛ إلا أنه عند استخدام عمليات الفاصلة العائمة، فإن أصغر قيمة لن تُعطي أفضل تقريب للمشتقة. فكلما صغرت قيمة h ، صغر الفرق بين f ( a + h ) و f ( a ) ، مما يُلغي أهمية الأرقام الأقل خطأً ويجعل الأرقام الأكثر خطأً أكثر أهمية. ونتيجةً لذلك، فإن أصغر قيمة ممكنة لـ h ستُعطي تقريبًا للمشتقة أكثر خطأً من قيمة أكبر قليلًا. ولعل هذه هي أكثر مشاكل الدقة شيوعًا وخطورة.
  • التحويلات إلى أعداد صحيحة ليست بديهية: فمثلاً، تحويل (63.0/9.0) إلى عدد صحيح ينتج عنه 7، بينما تحويل (0.63/0.09) قد ينتج عنه 6. والسبب في ذلك هو أن التحويلات عادةً ما تُقَطِّع العدد بدلاً من تقريبه. وقد تُنتج دوال التقريب والتصغير نتائج تختلف بمقدار واحد عن القيمة المتوقعة بديهياً.
  • نطاق الأس محدود: قد تتجاوز النتائج الحد المسموح به، مما ينتج عنه قيمة لانهائية، أو قد تنخفض عنه، مما ينتج عنه عدد غير طبيعي أو صفر. في هذه الحالات، ستفقد الدقة.
  • يُعد اختبار القسمة الآمنة أمرًا إشكاليًا: فالتحقق من أن المقسوم عليه ليس صفرًا لا يضمن عدم حدوث تجاوز في القسمة.
  • يُعد اختبار المساواة أمرًا إشكاليًا. فقد ينتج عن سلسلتين حسابيتين متساويتين رياضيًا قيمًا مختلفة للأعداد العشرية. [ 49 ]

الحوادث

  • في 25 فبراير 1991، تسبب عطل في بطارية صواريخ باتريوت MIM-104 في منعها من اعتراض صاروخ سكود قادم في الظهران ، المملكة العربية السعودية ، مما أدى إلى مقتل 28 جنديًا من الكتيبة الرابعة عشرة للإمداد والتموين التابعة للجيش الأمريكي . [ 50 ] كان حاسوب التحكم بالأسلحة يحسب الوقت بأجزاء من عشرة من الثانية منذ بدء التشغيل. ولتحويل هذا الوقت إلى عدد عشري من الثواني في حسابات السرعة والموقع، كان البرنامج في الأصل يضرب هذا الرقم بتقريب ثنائي ثابت النقطة مكون من 24 بت إلى 0.1، تحديدًا0.000110011001100110011002=0.1×(1-2-20).{\displaystyle 0.00011001100110011001100_{2}=0.1\times (1-2^{-20}).} تم لاحقًا تعديل بعض أجزاء البرنامج لاستخدام تحويل أكثر دقة إلى نظام الفاصلة العائمة، بينما بقيت أجزاء أخرى تستخدم تقريبًا 24 بت دون تحديث. [ 51 ] وقد تباينت هذه الأجزاء عن بعضها البعض بمقدار 3.43  مللي ثانية تقريبًا في الساعة. بعد 20 ساعة، كان هذا التباين، الذي بلغ حوالي 68.7  مللي ثانية، كافيًا لفقدان نظام تتبع الرادار أثر صواريخ سكود؛ وكان نظام التحكم في بطارية صواريخ الظهران يعمل منذ حوالي 100 ساعة عندما فشل في تتبع واعتراض صاروخ سكود قادم. [ 50 ] لم يكن سبب الفشل في الاعتراض هو استخدام نظام الفاصلة العائمة تحديدًا، بل طرح تقريبين مختلفين لتحويل الوحدات بأخطاء مختلفة عند تمثيل الوقت، لذا لم يختفِ خطأ تحويل الوحدات في الفرق، بل ازداد بشكل غير محدود مع وقت التشغيل. [ 51 ]
  • تقسيم السلامي هو ممارسة إزالة الجزء "غير المرئي" من المعاملة إلى حساب منفصل.

دقة الآلة وتحليل الخطأ العكسي

دقة الآلة هي كمية تُحدد دقة نظام الفاصلة العائمة، وتُستخدم في تحليل الخطأ العكسي لخوارزميات الفاصلة العائمة. تُعرف أيضًا باسم تقريب الوحدة أو إبسيلون الآلة . يُرمز لها عادةً بـ Ε <sub>mach</sub> ، وتعتمد قيمتها على طريقة التقريب المُستخدمة.

مع التقريب إلى الصفر، هـماخ=ب1-P،{\displaystyle \mathrm {E} _{\text{mach}}=B^{1-P},\,} بينما يتم التقريب إلى أقرب، هـماخ=12ب1-P،{\displaystyle \mathrm {E} _{\text{mach}}={\tfrac {1}{2}}B^{1-P},} حيث B هو أساس النظام و P هي دقة الجزء المهم (في الأساس B ).

هذا مهم لأنه يحد من الخطأ النسبي في تمثيل أي عدد حقيقي غير صفري x ضمن النطاق المعياري لنظام الفاصلة العائمة: |فل(x)-xx|هـماخ.{\displaystyle \left|{\frac {\operatorname {fl} (x)-x}{x}}\right|\leq \mathrm {E} _{\text{mach}}.}

يمكن استخدام تحليل الخطأ العكسي، الذي طوره ونشره جيمس هـ. ويلكنسون ، لإثبات استقرار خوارزمية تُنفذ دالة عددية عدديًا. [ 52 ] ويتمثل النهج الأساسي في إظهار أنه على الرغم من أن النتيجة المحسوبة، بسبب أخطاء التقريب، لن تكون دقيقة تمامًا، إلا أنها تمثل الحل الدقيق لمسألة مشابهة ذات بيانات إدخال مُشوشة قليلاً. إذا كان التشويش المطلوب صغيرًا، في حدود عدم اليقين في بيانات الإدخال، فإن النتائج تكون دقيقة إلى حد ما بقدر دقة البيانات. عندئذٍ، تُعرَّف الخوارزمية بأنها مستقرة عكسيًا . يُعد الاستقرار مقياسًا لحساسية إجراء عددي معين لأخطاء التقريب؛ في المقابل، يشير رقم حالة دالة لمسألة معينة إلى الحساسية الكامنة للدالة للتشويشات الصغيرة في مدخلاتها، وهو مستقل عن التنفيذ المستخدم لحل المسألة. [ 53 ]

كمثال بسيط، لنفترض تعبيرًا بسيطًا يعطي حاصل الضرب الداخلي لمتجهين (طولهما اثنان).x{\displaystyle x}وy{\displaystyle y}، ثم فل(xy)=فل(فل(x1y1)+فل(x2y2))، أين فل() يشير إلى تقريب صحيح للحسابات العشرية=فل((x1y1)(1+دلتا1)+(x2y2)(1+دلتا2))، أين دلتانهـماخ، من الأعلى=((x1y1)(1+دلتا1)+(x2y2)(1+دلتا2))(1+دلتا3)=(x1y1)(1+دلتا1)(1+دلتا3)+(x2y2)(1+دلتا2)(1+دلتا3)،{\displaystyle {\begin{aligned}\operatorname {fl} (x\cdot y)&=\operatorname {fl} {\big (}\operatorname {fl} (x_{1}\cdot y_{1})+\operatorname {fl} (x_{2}\cdot y_{2}){\big )},&&{\text{ where }}\operatorname {fl} (){\text{ indicates correctly rounded floating-point arithmetic}}\\&=\operatorname {fl} {\big (}(x_{1}\cdot y_{1})(1+\delta _{1})+(x_{2}\cdot y_{2})(1+\delta _{2}){\big )},&&{\text{ where }}\delta _{n}\leq \mathrm {E} _{\text{mach}},{\text{ from above}}\\&={\big (}(x_{1}\cdot y_{1})(1+\delta _{1})+(x_{2}\cdot y_{2})(1+\delta _{2}){\big )}(1+\delta _{3})\\&=(x_{1}\cdot y_{1})(1+\delta _{1})(1+\delta _{3})+(x_{2}\cdot y_{2})(1+\delta _{2})(1+\delta _{3}),\end{aligned}}} وهكذا فل(xy)=x^y^،{\displaystyle \operatorname {fl} (x\cdot y)={\hat {x}}\cdot {\hat {y}},}

أين

x^1=x1(1+دلتا1)؛x^2=x2(1+دلتا2)؛y^1=y1(1+دلتا3)؛y^2=y2(1+دلتا3)،{\displaystyle {\begin{aligned}{\hat {x}}_{1}&=x_{1}(1+\delta _{1});&{\hat {x}}_{2}&=x_{2}(1+\delta _{2});\\{\hat {y}}_{1}&=y_{1}(1+\delta _{3});&{\hat {y}}_{2}&=y_{2}(1+\delta _{3}),\\\end{aligned}}}

أين

دلتانهـماخ{\displaystyle \delta _{n}\leq \mathrm {E} _{\text{mach}}}

بحسب التعريف، وهو مجموع بيانات إدخال مُشوَّشة قليلاً (بمقدار Ε mach )، وبالتالي فهو مستقر عكسيًا. لمزيد من الأمثلة الواقعية في الجبر الخطي العددي ، انظر Higham 2002 [ 54 ] والمراجع الأخرى أدناه.

تقليل تأثير مشاكل الدقة

على الرغم من أن دقة العمليات الحسابية الفردية في معيار IEEE 754 مضمونة في حدود نصف قيمة ULP ، إلا أن الصيغ الأكثر تعقيدًا قد تعاني من أخطاء أكبر لأسباب متعددة. قد يكون فقدان الدقة كبيرًا إذا كانت المسألة أو بياناتها سيئة التكييف ، أي أن النتيجة الصحيحة شديدة الحساسية لأدنى التغيرات في بياناتها. مع ذلك، حتى الدوال جيدة التكييف قد تعاني من فقدان كبير في الدقة إذا استُخدمت خوارزمية غير مستقرة عدديًا لتلك البيانات: إذ قد تختلف الصيغ المتكافئة ظاهريًا للتعبيرات في لغة برمجة اختلافًا كبيرًا في استقرارها العددي. يتمثل أحد أساليب إزالة خطر فقدان الدقة هذا في تصميم وتحليل خوارزميات مستقرة عدديًا، وهو هدف فرع من الرياضيات يُعرف بالتحليل العددي . ثمة نهج آخر يُمكنه الحماية من مخاطر عدم الاستقرار العددي، وهو حساب القيم الوسيطة (الأولية) في الخوارزمية بدقة أعلى من تلك المطلوبة للنتيجة النهائية، [ 55 ] مما يُمكنه إزالة هذه المخاطر أو تقليلها بشكل كبير، [ 56 ] وقد صُممت دقة IEEE 754 الرباعية والدقة الموسعة لهذا الغرض عند الحساب بدقة مضاعفة. [ 57 ] [ ملاحظة 11 ]

على سبيل المثال، الخوارزمية التالية هي تطبيق مباشر لحساب الدالةو(x)=x-1خبرة(x-1)-1{\displaystyle f(x)={\frac {x-1}{\exp(x-1)-1}}}، وهو مكان جيد التكييف فيx=1{\displaystyle x=1}[ ملاحظة 12 ] ومع ذلك ، يمكن إثبات أنه غير مستقر عدديًا ويفقد ما يصل إلى نصف الأرقام المعنوية التي تحملها العمليات الحسابية عند حسابه بالقرب من 1.0. [ 58 ]

#include <math.h>دالة f ( x ) { y = x - 1.0 ; z = exp ( y ) ; if ( z ! = 1.0 ) { z = y / ( z - 1.0 ) ; } return z ; }

يكشف التحليل العددي للخوارزمية أنه إذا z = y / (z - 1.0);تم إجراء التغيير غير الواضح التالي على السطر:

z = log ( z ) / ( z - 1.0 );

عندئذٍ تصبح الخوارزمية مستقرة عدديًا ويمكنها الحساب بدقة مضاعفة كاملة. [ 58 ]

للحفاظ على خصائص البرامج المستقرة عدديًا والمصممة بعناية، يتطلب الأمر معالجة دقيقة من قِبل المُصرّف . قد تُعيق بعض "التحسينات" التي يُجريها المُصرّف (مثل إعادة ترتيب العمليات) أهدافَ البرامج ذات السلوك الجيد. ثمة جدلٌ حول أوجه قصور المُصرّفات وتصميمات اللغات في هذا المجال: تُعدّ لغة C99 مثالًا على لغةٍ تُحدّد فيها هذه التحسينات بدقةٍ للحفاظ على الدقة العددية. انظر المراجع الخارجية في أسفل هذه المقالة.

إنّ المعالجة التفصيلية لتقنيات كتابة برامج الفاصلة العائمة عالية الجودة تتجاوز نطاق هذه المقالة، ويُرجى الرجوع إلى المراجع [ 54 ] و [ 59 ] والمراجع الأخرى في أسفل هذه المقالة. يقترح كاهان عدة قواعد عامة يمكن أن تقلل بشكل كبير، وبمقادير هائلة [ 59 من خطر حدوث أخطاء عددية، بالإضافة إلى التحليل العددي الأكثر دقة أو بدلاً منه. وتشمل هذه القواعد، كما ذُكر أعلاه، حساب جميع التعبيرات والنتائج الوسيطة بأعلى دقة يدعمها الجهاز (إحدى القواعد العامة الشائعة هي استخدام ضعف دقة النتيجة المطلوبة، أي الحساب بدقة مضاعفة للحصول على نتيجة نهائية بدقة مفردة، أو بدقة مضاعفة موسعة أو رباعية للحصول على نتائج تصل إلى دقة مضاعفة [ 60 ] ). وتقريب بيانات الإدخال والنتائج إلى الدقة المطلوبة والمدعومة فقط من قِبل بيانات الإدخال (إذ قد يؤدي استخدام دقة زائدة في النتيجة النهائية تتجاوز الدقة المطلوبة والمدعومة من قِبل بيانات الإدخال إلى نتائج مضللة، ويزيد من تكلفة التخزين، ويقلل من السرعة، كما قد تؤثر البتات الزائدة على تقارب الإجراءات العددية: [ 61 ] والجدير بالذكر أن الشكل الأول من المثال التكراري الموضح أدناه يتقارب بشكل صحيح عند استخدام هذه القاعدة العامة). فيما يلي وصف موجز لعدد من المشكلات والتقنيات الإضافية.

نظرًا لأن الكسور العشرية غالبًا ما يصعب تمثيلها بدقة في نظام الفاصلة العائمة الثنائية، فإن هذا النوع من العمليات الحسابية يكون في أفضل حالاته عند استخدامه لقياس كميات واقعية على نطاق واسع (مثل الفترة المدارية لقمر حول زحل أو كتلة بروتون ) ، وفي أسوأ حالاته عند استخدامه لنمذجة تفاعلات الكميات المعبر عنها كسلاسل عشرية يُتوقع أن تكون دقيقة. [ 56 ] [ 59 ] ومن الأمثلة على الحالة الأخيرة الحسابات المالية. لهذا السبب، لا تميل البرامج المالية إلى استخدام تمثيل الأرقام بنظام الفاصلة العائمة الثنائية. [ 62 ] تم تصميم نوع البيانات "decimal" في لغتي البرمجة C# و Python ، والتنسيقات العشرية لمعيار IEEE 754-2008 ، لتجنب مشاكل تمثيلات الفاصلة العائمة الثنائية عند تطبيقها على القيم العشرية الدقيقة التي يُدخلها المستخدم، ولضمان أن تتصرف العمليات الحسابية دائمًا كما هو متوقع عند طباعة الأرقام بنظام الفاصلة العشرية.

قد لا تتحقق التوقعات المستمدة من الرياضيات في مجال حسابات الفاصلة العائمة. على سبيل المثال، من المعروف أن(x+y)(x-y)=x2-y2{\displaystyle (x+y)(x-y)=x^{2}-y^{2}\,}وذلكالخطيئة2θ+كوس2θ=1{\displaystyle \sin ^{2}{\theta }+\cos ^{2}{\theta }=1\,}ومع ذلك، لا يمكن الاعتماد على هذه الحقائق عندما تكون الكميات المعنية ناتجة عن حسابات الفاصلة العائمة.

يتطلب استخدام اختبار المساواة ( if (x==y) ...) توخي الحذر عند التعامل مع الأعداد العشرية. حتى التعبيرات البسيطة مثل 0.6 / 0.2 - 3 == 0هذه لن تكون صحيحة على معظم أجهزة الكمبيوتر [ 63 ] (في معيار IEEE 754، على سبيل المثال، الدقة المزدوجة 0.6 / 0.2 - 3تساوي تقريبًا−4.44089209850063 × 10−16 ). ونتيجةً لذلك ، تُستبدل هذه الاختبارات أحيانًا بمقارنات "تقريبية" ( حيث تكون قيمة إبسيلون صغيرة بماif (abs(x-y) < epsilon) ... يكفي ومناسبة للتطبيق، مثل 1.0E−13). وتختلف جدوى هذا الأمر اختلافًا كبيرًا، وقد يتطلب تحليلًا عدديًا لتحديد قيمة إبسيلون. [ 54 ] ينبغي إجراء القيم المستمدة من تمثيل البيانات الأساسي ومقارناتها بدقة أوسع وممتدة لتقليل مخاطر حدوث مثل هذه التناقضات الناتجة عن أخطاء التقريب. [ 59 ] غالبًا ما يكون من الأفضل تنظيم الكود بطريقة تجعل هذه الاختبارات غير ضرورية. على سبيل المثال، في الهندسة الحسابية ، يمكن إجراء اختبارات دقيقة لتحديد ما إذا كانت نقطة ما تقع على خط أو مستوى محدد بنقاط أخرى أو خارجه باستخدام الدقة التكيفية أو طرق الحساب الدقيقة. [ 64 ]

قد تتفاقم الأخطاء الصغيرة في العمليات الحسابية ذات الفاصلة العائمة عندما تُنفّذ الخوارزميات الرياضية عملياتٍ عددًا هائلاً من المرات. ومن الأمثلة على ذلك: عكس المصفوفة ، وحساب المتجهات الذاتية ، وحل المعادلات التفاضلية. يجب تصميم هذه الخوارزميات بعناية فائقة، باستخدام أساليب عددية مثل التحسين التكراري ، لكي تعمل بكفاءة. [ 65 ]

يُعدّ جمع متجه من قيم الفاصلة العائمة خوارزمية أساسية في الحوسبة العلمية ، ولذا فإنّ إدراك متى قد يحدث فقدان للدلالة أمرٌ بالغ الأهمية. على سبيل المثال، عند جمع عدد كبير جدًا من الأرقام، تكون كل قيمة من القيم المضافة صغيرة جدًا مقارنةً بالمجموع. وهذا قد يؤدي إلى فقدان الدلالة. في هذه الحالة، يكون الجمع النموذجي على النحو التالي:

3253.671 + 3.141276 ----------- 3256.812

تُفقد الأرقام الثلاثة الأولى من الأعداد المضافة فعليًا. لنفترض، على سبيل المثال، أننا نريد جمع عدة أعداد، جميعها تقريبًا تساوي 3. بعد جمع 1000 عدد منها، يصبح المجموع التراكمي حوالي 3000؛ ولا يمكن استعادة الأرقام المفقودة. يمكن استخدام خوارزمية جمع كاهان لتقليل الأخطاء. [ 54 ]

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

  • ت0=13{\textstyle t_{0}={\frac {1}{\sqrt {3}}}}
  • الصف الأول:تأنا+1=تأنا2+1-1تأنا{\textstyle t_{i+1}={\frac {{\sqrt {t_{i}^{2}+1}}-1}{t_{i}}}}
  • النموذج الثاني:تأنا+1=تأناتأنا2+1+1{\textstyle t_{i+1}={\frac {t_{i}}{{\sqrt {t_{i}^{2}+1}}+1}}}
  • π6×2أنا×تأنا{\displaystyle \pi \sim 6\times 2^{i}\times t_{i}}، متقاربة كـأنا{\displaystyle i\rightarrow \infty }

فيما يلي عملية حسابية باستخدام حساب "double" الخاص بمعيار IEEE (وهو عدد ذو دلالة إحصائية بدقة 53 بت):

i 6 × 2 i × t i ، الصيغة الأولى 6 × 2 i × t i ، الصيغة الثانية --------------------------------------------------------- 0 3 .4641016151377543863 3 .4641016151377543863 1 3 .2153903091734710173 3 .2153903091734723496 2 3.1 596599420974940120 3.1 596599420975006733 3 3.14 60862151314012979 3.14 60862151314352708 4 3.14 27145996453136334 3.14 27145996453689225 5 3.141 8730499801259536 3.141 8730499798241950 6 3.141 6627470548084133 3.141 6627470568494473 7 3.141 6101765997805905 3.141 6101766046906629 8 3.14159 70343230776862 3.14159 70343215275928 9 3.14159 37488171150615 3.14159 37487713536668 10 3.141592 9278733740748 3.141592 9273850979885 11 3.141592 7256228504127 3.141592 7220386148377 12 3.1415926 717412858693 3.1415926 707019992125 13 3.1415926 189011456060 3.14159265 78678454728 14 3.1415926 717412858693 3.14159265 46593073709 15 3.14159 19358822321783 3.141592653 8571730119 16 3.1415926 717412858693 3.141592653 6566394222 17 3.1415 810075796233302 3.141592653 6065061913 18 3.1415926 717412858693 3.1415926535 939728836 19 3.141 4061547378810956 3.1415926535 908393901 20 3.14 05434924008406305 3.1415926535 900560168 21 3.14 00068646912273617 3.141592653589 8608396 22 3.1 349453756585929919 3.141592653589 8122118 23 3.14 00068646912273617 3.14159265358979 95552 24 3 .2245152435345525443 3.14159265358979 68907 25 3.14159265358979 62246 26 3.14159265358979 62246 27 3.14159265358979 62246 28 3.14159265358979 62246 القيمة الحقيقية هي 3.14159265358979323846264338327...

على الرغم من أن صيغتي التكرار متكافئتان رياضيًا بشكل واضح، [ ملاحظة 13 ] فإن الصيغة الأولى تطرح 1 من عدد قريب جدًا من 1، مما يؤدي إلى فقدان متزايد للأرقام المعنوية . ومع تكرار تطبيق التكرار، تتحسن الدقة في البداية، ثم تتدهور. ولا تتجاوز الدقة أبدًا 8 أرقام تقريبًا، على الرغم من أن الحساب ذي 53 بتًا قادر على تحقيق دقة تصل إلى 16 رقمًا تقريبًا. وعند استخدام الصيغة الثانية للتكرار، تتقارب القيمة إلى دقة 15 رقمًا.

تحسين "الرياضيات السريعة"

يعني افتقار عمليات الفاصلة العائمة إلى خاصية التجميع، كما ذُكر آنفًا، أن المترجمات لا تستطيع إعادة ترتيب التعبيرات الحسابية بكفاءة كما تفعل مع حسابات الأعداد الصحيحة والثابتة، مما يُشكل عائقًا أمام التحسينات مثل حذف التعبيرات الفرعية المشتركة والتحويل التلقائي إلى متجهات . [ 66 ] يُفعّل خيار "الرياضيات السريعة" في العديد من المترجمات (ICC، GCC، Clang، MSVC...) إعادة التجميع مع افتراضات غير آمنة مثل عدم وجود NaN والأعداد اللانهائية في معيار IEEE 754. كما تُوفر بعض المترجمات خيارات أكثر دقة لتفعيل إعادة التجميع فقط أو لتحديد مناطق معينة من التعليمات البرمجية لتحسينها بشكل أكبر. [ 67 ] في كلتا الحالتين، يتعرض المبرمج للعديد من مخاطر الدقة المذكورة أعلاه في الجزء من البرنامج الذي يستخدم "الرياضيات السريعة". [ 68 ]

في بعض المترجمات (مثل GCC وClang [عند تثبيت GCC])، قد يؤدي تفعيل العمليات الحسابية "السريعة" إلى تعطيل البرنامج للأعداد العشرية غير العادية عند بدء التشغيل، مما يؤثر على سلوك الأعداد العشرية ليس فقط في الكود المُولّد، بل أيضًا في أي برنامج يستخدم هذا الكود كمكتبة . وقد تم إصلاح هذه المشكلة في GCC 13. [ 69 ]

في معظم مُجمِّعات لغة فورتران ، وفقًا لمعيار ISO/IEC 1539-1:2004، يُعدّ إعادة الربط هو الوضع الافتراضي، مع منع حدوث أي انقطاع إلى حد كبير بفضل إعداد "حماية الأقواس" (المُفعَّل افتراضيًا أيضًا). يمنع هذا الإعداد المُجمِّع من إعادة الربط خارج حدود الأقواس. [ 70 ] يُعدّ مُجمِّع إنتل فورتران حالةً شاذةً بارزة. [ 71 ]

تتمثل إحدى المشكلات الشائعة في الرياضيات "السريعة" في أن التعبيرات الفرعية قد لا تُحسَّن بشكل متطابق من موضع لآخر، مما يؤدي إلى اختلافات غير متوقعة. أحد تفسيرات هذه المشكلة هو أن الرياضيات "السريعة" كما هي مُطبَّقة حاليًا تفتقر إلى دلالات واضحة. إحدى المحاولات لإضفاء الطابع الرسمي على تحسينات الرياضيات "السريعة" هي تلك الموجودة في Icing ، وهو مُصرِّف مُوثَّق. [ 72 ]

انظر أيضاً

ملحوظات

  1. يُطلق بعض المؤلفين على الجزء الدال في العدد العشري اسم " المانتسا" ، ويجب عدم الخلط بينه وبين مانتسا اللوغاريتم . كما يستخدم البعض مصطلحات أخرى مبهمة نوعًا ما، مثل "المعامل" أو "الوسيط" . وقد يكون استخدام مصطلح " الكسر" من قِبل بعض المؤلفين مُضللًا أيضًا. أما مصطلح " الخاصية" (كما هو مستخدم، على سبيل المثال، من قِبل مركز السيطرة على الأمراض والوقاية منها ) فهو غامض، إذ كان يُستخدم تاريخيًا أيضًا لتحديد شكل من أشكال أس الأعداد العشرية.
  2. يُشار أحيانًا إلى أسّ العدد العشري باسم المقياس . أما مصطلح " الخاصية" (الذي يشير إلى الأسّ المتحيز ، أو انحياز الأسّ ، أو تمثيل n الزائد ) فهو غامض، إذ استُخدم تاريخيًا أيضًا لتحديد الجزء الدالّ من الأعداد العشرية.
  3. يتم استخدام الحساب ذو الفاصلة العائمة الست عشري (الأساس 16) في نظام IBM 360 (1964) و 370 (1970) بالإضافة إلى العديد من أجهزة IBM الأحدث، وفي أجهزة RCA Spectra 70 (1964)، وأجهزة Siemens 4004 (1965)، و7.700 (1974)، و7.800، و7.500 (1977) الرئيسية وخلفائها، وأجهزة Unidata 7.000 الرئيسية، و Manchester MU5 (1972)، وأجهزة HEP (1982)، وفي عائلات الحواسيب الرئيسية المتوافقة مع 360/370 التي صنعتها Fujitsu وAmdahl وHitachi. كما تم استخدامهفي Illinois ILLIAC III (1966)، و Data General Eclipse S/200 (حوالي 1974)، و Gould Powernode 9080 (الثمانينيات)، و Interdata 8/32 (السبعينيات)، و SEL Systems 85 و 86 بالإضافة إلى SDS Sigma 5 (1967)، و 7 (1966) و Xerox Sigma 9 (1970).
  4. يتم استخدام الحساب الثماني (الأساس 8) ذي الفاصلة العائمة في أجهزة الكمبيوتر Ferranti Atlas (1962)و Burroughs B5500 (1964) و Burroughs B5700 (1971)و Burroughs B6700 (1971)و Burroughs B7700 (1972).
  5. تُستخدم الحسابات الرباعية (الأساس 4) ذات الفاصلة العائمة في حاسوب إلينوي ILLIAC II (1962).كما تُستخدم أيضًا في أنظمة المسح الميداني الرقمي DFS IV و V عالية الدقة.
  6. يتم استخدام الحساب ذي الفاصلة العائمة Base-256 في جهاز الكمبيوتر R1 التابع لمعهد رايس (منذ عام 1958).
  7. يتم استخدام الحساب ذي الفاصلة العائمة Base-65536 في جهاز الكمبيوتر MANIAC II (1956).
  8. لا تقوم أجهزة الكمبيوتر بالضرورة بحساب القيمة الدقيقة؛ بل يجب عليها ببساطة إنتاج النتيجة المقربة المكافئة كما لو أنها قامت بحساب النتيجة الدقيقة للغاية.
  9. أدى التعقيد الهائل لخوارزميات القسمة الحديثة في الماضي إلى خطأ شهير.فقد تم شحن إصدار مبكر من معالج إنتل بنتيوم مزودًا بتعليمات قسمة كانت تُعطي، في حالات نادرة، نتائج غير دقيقة. وقد تم شحن العديد من أجهزة الكمبيوتر قبل اكتشاف هذا الخطأ. وحتى استبدال أجهزة الكمبيوتر المعيبة، تم تطوير نسخ مُعدّلة من المُترجمات البرمجية لتجنب حالات الفشل. انظر: خطأ القسمة في بنتيوم .
  10. لكن محاولة حسابكوس(π){\displaystyle \cos(\pi )}العائد-1{\displaystyle -1}بالضبط. لأن المشتقة تقترب من الصفر بالقرب منπ{\displaystyle \pi }تأثير عدم الدقة في الوسيط أصغر بكثير من تباعد الأرقام العشرية حول-1{\displaystyle -1}والنتيجة بعد التقريب دقيقة.
  11. يشير ويليام كاهان إلى: "باستثناء الحالات النادرة للغاية، فإن الحساب الدقيق للغاية يقلل بشكل عام من المخاطر الناتجة عن التقريب بتكلفة أقل بكثير من سعر محلل الأخطاء الكفء."
  12. يوضح توسيع تايلور لهذهالدالة أنها جيدة التكييف بالقرب منx=1{\displaystyle x=1}:و(x)=1-x-12+(x-1)212-(x-1)4720+(x-1)630240-(x-1)81209600+{\displaystyle f(x)=1-{\frac {x-1}{2}}+{\frac {(x-1)^{2}}{12}}-{\frac {(x-1)^{4}}{720}}+{\frac {(x-1)^{6}}{30240}}-{\frac {(x-1)^{8}}{1209600}}+\cdots }ل|x-1|<π{\displaystyle |x-1|<\pi }.
  13. يمكن التحقق من تكافؤ الشكلين جبريًا بملاحظة أن مقام الكسر في الشكل الثاني هو مرافق بسط الشكل الأول. وبضرب بسط ومقام التعبير الأول بهذا المرافق، نحصل على التعبير الثاني .

مراجع

  1. 1 2 3 4 5 6 مولر، جان ميشيل؛ بريسبار، نيكولاس. دي دينشين، فلوران؛ جانرود، كلود بيير؛ لوفيفر، فنسنت؛ ملكيوند، غيوم؛ ريفول, ناتالي ; ستيهلي، داميان؛ توريس، سيرج (2010). دليل حساب النقطة العائمة (الطبعة الأولى  ). بيركهوسر . دوى : 10.1007/978-0-8176-4705-6 . رقم ISBN 978-0-8176-4704-9. إل سي سي إن 2009939668 . 
  2. 1 2 ستيربنز، بات هـ. (1974). حسابات الفاصلة العائمة . إنجلوود كليفس، نيوجيرسي، الولايات المتحدة: برنتيس هول. ISBN 0-13-322495-3.
  3. سميث، ستيفن و. (1997). "الفصل 28، الأعداد الثابتة مقابل الأعداد العائمة" . دليل العالم والمهندس لمعالجة الإشارات الرقمية . منشورات كاليفورنيا التقنية. ص 514. ISBN  978-0-9660176-3-2تم الاطلاع عليه بتاريخ 31 ديسمبر 2012 .
  4. 1 2 زيندنر، إبرهارد (صيف 2008). “Rechnerarithmetik: Fest- und Gleitkommasysteme” (PDF) (نص المحاضرة) (باللغة الألمانية). جامعة فريدريش شيلر في جينا . ص. 2. أرشفة (PDF) من النسخة الأصلية بتاريخ 2018-08-07 . تم الاسترجاع 2018-08-07 . (ملاحظة: هذا المرجع يعطي بشكل خاطئ أساس الفاصلة العائمة لجهاز MANIAC II على أنه 256، بينما هو في الواقع 65536.)
  5. 1 2 3 4 بيبي، نيلسون إتش إف (22-08-2017). "الفصل ح. بنى الفاصلة العائمة التاريخية". دليل حساب الدوال الرياضية - البرمجة باستخدام مكتبة برامج MathCW المحمولة ( الطبعة الأولى). سولت ليك سيتي، يوتا، الولايات المتحدة الأمريكية: سبرينغر إنترناشونال بابليشينج إيه جي . ص 948. doi : 10.1007/978-3-319-64110-2 . ISBN   978-3-319-64109-6. LCCN 2017947446 . S2CID 30244721 .  
  6. سافارد، جون جي جي (2018) [2007]، "معيار الفاصلة العائمة العشري" ، quadibloc ، مؤرشف من الأصل في 2018-07-03 ، تم استرجاعه في 2018-07-16
  7. باركنسون، روجر (7 ديسمبر 2000). "الفصل 2 - أنظمة المسح الرقمي للمواقع عالية الدقة - الفصل 2.1 - أنظمة التسجيل الميداني الرقمي" . مسوحات المواقع عالية الدقة ( الطبعة الأولى). مطبعة سي آر سي . ص 24. ISBN   978-0-20318604-6تم الاطلاع عليه بتاريخ 18 أغسطس 2019. [ …] كانت أنظمة مثل نظام الحقل الرقمي DFS IV وDFS V أنظمة فاصلة عائمة رباعية وتستخدم خطوات كسب مقدارها 12  ديسيبل. […](256 صفحة)
  8. لازاروس، روجر ب. (30 يناير 1957) [1 أكتوبر 1956]. "مانياك 2" (ملف PDF ) . لوس ألاموس، نيو مكسيكو، الولايات المتحدة الأمريكية: مختبر لوس ألاموس العلمي التابع لجامعة كاليفورنيا. ص 14. LA-2083. مؤرشف (ملف PDF) من الأصل في 7 أغسطس 2018. تم الاسترجاع في 7 أغسطس 2018. [...] قاعدة مانياك العائمة، وهي 2^ 16 = 65,536. [...] تسمح قاعدة مانياك الكبيرة بزيادة كبيرة في سرعة العمليات الحسابية ذات الفاصلة العائمة. على الرغم من أن هذه القاعدة الكبيرة تعني إمكانية وجود ما يصل إلى 15 صفرًا في البداية، إلا أن حجم الكلمة الكبير البالغ 48 بت يضمن دلالة كافية. [...] 
  9. توريس كيفيدو، ليوناردو. Automática: Complemento de la Teoría de las Máquinas، (pdf) ، الصفحات من 575 إلى 583، Revista de Obras Públicas، 19 نوفمبر 1914.
  10. رونالد ت. كنوسيل. الأرقام والحواسيب ، سبرينغر، الصفحات 84-85، 2017. ISBN 978-3319505084
  11. راندل 1982 ، ص 6، 11-13.
  12. راندل، برايان. الحواسيب الرقمية، تاريخ الأصول، (ملف PDF) ، ص 545، الحواسيب الرقمية: الأصول، موسوعة علوم الحاسوب، يناير 2003.
  13. روخاس، راؤول (أبريل–يونيو 1997). "إرث كونراد تسوزه: بنية Z1 وZ3" (ملف PDF) . حوليات IEEE لتاريخ الحوسبة . 19 (2): 5–16 . doi : 10.1109/85.586067 . مؤرشف (PDF) من الأصل بتاريخ 2022-07-03 . تم الاطلاع عليه بتاريخ 2022-07-03 .(12 صفحة)
  14. روخاس، راؤول (2014-06-07). "الـ Z1: بنية وخوارزميات أول حاسوب لكونراد تسوزه". arXiv : 1406.1886 [ cs.AR ].
  15. 1 2 كاهان، ويليام مورتون (15 يوليو 1997). "الأثر السلبي للغات البرمجة ومعايير الأداء على الرياضيات التطبيقية والفيزياء والكيمياء. محاضرة جون فون نيومان" (ملف PDF) . ص 3. مؤرشف (ملف PDF) من الأصل بتاريخ 5 سبتمبر 2008. 
  16. راندل، برايان ، محرر. (1982) [1973]. أصول الحواسيب الرقمية: أوراق مختارة ( الطبعة الثالثة). برلين؛ نيويورك: سبرينغر-فيرلاغ . ص 244. ISBN   978-3-540-11319-5.
  17. سيفرانس، تشارلز (20-02-1998). "مقابلة مع الرجل العجوز في مجال الفاصلة العائمة" .
  18. 1 2 3 4 غولدبيرغ، ديفيد (مارس 1991). "ما يجب أن يعرفه كل عالم حاسوب عن الحساب ذي الفاصلة العائمة" . مجلة ACM Computing Surveys . 23 (1): 5-48 . doi : 10.1145/103162.103163 . S2CID 222008826 . (مع الملحق "الاختلافات بين تطبيقات IEEE 754"):،)
  19. ISO/IEC 9899:1999 - لغات البرمجة - C. Iso.org. §F.2، ملاحظة 307."الممتد" هو تنسيق البيانات الممتد المزدوج لمعيار IEC 60559. ويشير مصطلح "الممتد" إلى كل من تنسيقات IEC 60559 الشائعة ذات 80 بت والتنسيقات الرباعية ذات 128 بت.
  20. "تمثيل النقطة العائمة IEEE" . 2021-08-03.
  21. استخدام مجموعة مترجمات GNU، خيارات i386 و x86-64 مؤرشفة في 2015-01-16 على Wayback Machine .
  22. "long double (خاص بـ GCC) و __float128" . StackOverflow .
  23. "معيار استدعاء الإجراءات لبنية ARM 64 بت (AArch64)" (ملف PDF) . 22-05-2013. مؤرشف (ملف PDF) من الأصل بتاريخ 31-07-2013 . تم الاطلاع عليه بتاريخ 22-09-2019 .
  24. "مجموعة أدوات مُترجم ARM، مرجع المُترجم، الإصدار 5.03" (ملف PDF) . 2013. القسم 6.3 أنواع البيانات الأساسية . مؤرشف (ملف PDF) من الأصل بتاريخ 27-06-2015 . تم الاطلاع عليه بتاريخ 08-11-2019 .
  25. كاهان، ويليام مورتون (20 نوفمبر 2004). "حول تكلفة حسابات الفاصلة العائمة بدون حسابات فائقة الدقة" (ملف PDF) . مؤرشف (PDF) من الأصل بتاريخ 25 مايو 2006. تم الاطلاع عليه بتاريخ 19 فبراير 2012 .
  26. "openEXR" . openEXR. مؤرشف من الأصل بتاريخ 2013-05-08 . تم الاطلاع عليه بتاريخ 2012-04-25 . نظرًا لأن مواصفات IEEE-754 للفاصلة العائمة لا تُحدد تنسيقًا من 16 بت، فقد ابتكرت ILM تنسيق "النصف". تحتوي قيم النصف على بت إشارة واحد، و5 بتات للأس، و10 بتات للكسر العشري.
  27. "مقدمة تقنية إلى OpenEXR - نوع البيانات النصفي" . OpenEXR . تم الاطلاع عليه بتاريخ 16-04-2024 .
  28. "تحليل IEEE-754" . تم الاطلاع عليه بتاريخ 29-08-2024 .
  29. ١ ٢ فريق بورلاند (١٩٩٨-٠٧-٠٢) [١٩٩٤-٠٣-١٠]. "التحويل بين تنسيقات مايكروسوفت الثنائية وIEEE" . قاعدة بيانات المعلومات التقنية (TI1431C.txt). إمباركاديرو الولايات المتحدة الأمريكية / إنبرايز (أصلاً: بورلاند ). المعرف ١٤٠٠. مؤرشف من الأصل في ٢٠١٩-٠٢-٢٠ . تم الاسترجاع في ٢٠١٦-٠٥-٣٠ . […] _fmsbintoieee(float *src4, float *dest4) […] تنسيق مايكروسوفت الثنائي […] ترتيب البايت => m3 | m2 | m1 | الأس […] m1 هو البايت الأكثر أهمية => sbbb|bbbb […] m3 هو البايت الأقل أهمية […] m = بايت الجزء العشري […] s = بت الإشارة […] b = بت […] MBF هو انحياز 128 وIEEE هو انحياز 127. […] يضع MBF الفاصلة العشرية قبل البت المفترض ، بينما يضعها IEEE بعد البت المفترض. […] ieee_exp = msbin[3] - 2; /* في الواقع، msbin[3]-1-128+127 */ […] _dmsbintoieee(double *src8, double *dest8) […] تنسيق MS الثنائي […] ترتيب البايتات => m7 | m6 | m5 | m4 | m3 | m2 | m1 | الأس […] m1 هو البايت الأكثر أهمية => smmm|mmmm […] m7 هو البايت الأقل أهمية […] MBF له انحياز 128 وIEEE له انحياز 1023. […] يضع MBF الفاصلة العشرية قبل البت المفترض، بينما يضعها IEEE بعد البت المفترض. […] ieee_exp = msbin[7] - 128 - 1 + 1023; […]
  30. 1 2 ستيل، مايكل (2008-10-20). "أنشئ نسختك الخاصة من مايكروسوفت بيسك لـ 6502" . pagetable.com. مؤرشف من الأصل في 2016-05-30 . تم الاسترجاع في 2016-05-30 .
  31. "مقارنة بين تنسيق IEEE الثنائي وتنسيق مايكروسوفت؛ مشاكل التقريب (كامل)" . دعم مايكروسوفت . مايكروسوفت . 21-11-2006. رقم المقالة KB35826، Q35826. مؤرشف من الأصل في 28-08-2020 . تم الاطلاع عليه في 24-02-2010 .
  32. 1 2 خاريا، باريش (14 مايو 2020). "TensorFloat-32 في وحدة معالجة الرسومات A100 يُسرّع تدريب الذكاء الاصطناعي والحوسبة عالية الأداء حتى 20 ضعفًا" . تم الاطلاع عليه بتاريخ 16 مايو 2020 .
  33. "نظرة معمقة على بنية NVIDIA Hopper" . 2022-03-22.
  34. ميكيفيتشيوس، باوليوس؛ ستوسيتش، دوسان؛ بورغيس، نيل؛ كورنيا، ماريوس؛ دوبي، براديب؛ غريسينثويت، ريتشارد؛ ها، سانغوون؛ هاينيك، ألكسندر؛ جود، باتريك؛ كامالو، جون؛ ميليمبودي، نافين؛ أوبرمان، ستيوارت؛ شويبي، محمد؛ سيو، مايكل؛ وو، هاو (2022-09-12). "صيغ FP8 للتعلم العميق". arXiv : 2209.05433 [ cs.LG ].
  35. كاهان، ويليام مورتون (11 يناير 2006). "ما مدى جدوى التقييمات العشوائية لتقريب الأرقام في حسابات الفاصلة العائمة؟" (ملف PDF) . مؤرشف (PDF) من الأصل بتاريخ 21 ديسمبر 2004.
  36. 1 2 جاي، ديفيد م. (1990). تحويلات صحيحة من النظام الثنائي إلى النظام العشري ومن النظام العشري إلى النظام الثنائي (تقرير فني). مخطوطة التحليل العددي 90-10، مختبرات AT&T Bell. CiteSeerX 10.1.1.31.4049 . ( dtoa.c في برنامج netlab )
  37. لويتش، فلوريان (2010). "طباعة الأعداد العشرية بسرعة ودقة مع الأعداد الصحيحة" (ملف PDF) . وقائع المؤتمر الحادي والثلاثين لجمعية ACM SIGPLAN حول تصميم لغات البرمجة وتنفيذها . PLDI '10: مؤتمر ACM SIGPLAN حول تصميم لغات البرمجة وتنفيذها. الصفحات 233-243 . doi : 10.1145/1806596.1806623 . ISBN  978-1-45030019-3. S2CID 910409 . مؤرشف (PDF) من الأصل بتاريخ 2014-07-29. 
  38. تمت إضافة دعم خوارزمية Grisu3 للدالة double.ToString(). بواسطة mazong1123 · طلب سحب رقم 14646 · dotnet/coreclr" . GitHub .
  39. آدامز، أولف (2018-12-02). "ريو: تحويل سريع من الأعداد العشرية إلى السلاسل النصية" . إشعارات ACM SIGPLAN . 53 (4): 270-282 . doi : 10.1145/3296979.3192369 . S2CID 218472153 . 
  40. جولييتي، رافايلو. "طريقة Schubfach لتقديم الزوجي" .
  41. ^ "أبولز/دراشينيست" . جيثب . 2022-11-10.
  42. "google/double-conversion" . GitHub . 2020-09-21.
  43. ليمير، دانيال (22 مارس 2021). "تحليل الأرقام بسرعة غيغابايت في الثانية". البرمجيات: الممارسة والخبرة . 51 (8): 1700-1727 . arXiv : 2101.11408 . doi : 10.1002/spe.2984 . S2CID 231718830 . 
  44. باترسون، ديفيد أ.؛ هينيسي، جون ل. (2014). تنظيم وتصميم الحاسوب، واجهة العتاد/البرمجيات . سلسلة مورغان كوفمان في هندسة وتصميم الحاسوب ( الطبعة الخامسة). والتهام، ماساتشوستس، الولايات المتحدة الأمريكية: إلسيفير. ص 793. ISBN   978-9-86605267-5.
  45. 1 2 براءة اختراع أمريكية رقم 3037701A ، هوبيرتو إم سييرا، "وسائل التحكم الحسابي للفاصلة العشرية العائمة للآلة الحاسبة"، صدرت في 5 يونيو 1962 
  46. 1 2 كاهان، ويليام مورتون (1997-10-01). "ملاحظات محاضرة حول حالة معيار IEEE 754 للحسابات الثنائية ذات الفاصلة العائمة" (ملف PDF) . ص 9. مؤرشف (ملف PDF) من الأصل بتاريخ 22-06-2002. 
  47. "D.3.2.1" . أدلة مطوري البرامج لبنى Intel 64 و IA-32 . المجلد 1. 
  48. هاريس، ريتشارد (أكتوبر 2010). "سيتعين عليك التفكير!" . مجلة Overload (99): 5-10 . الرقم الدولي الموحد للدوريات 1354-3172 . تاريخ الاسترجاع 24-09-2011 . الأمر الأكثر إثارة للقلق هو خطأ الإلغاء الذي قد يؤدي إلى فقدان كارثي للدقة. 
  49. كريستوفر باركر: PEP 485 -- دالة لاختبار التساوي التقريبي
  50. 1 2 "نظام باتريوت للدفاع الصاروخي: مشكلة برمجية أدت إلى عطل في النظام في الظهران، المملكة العربية السعودية" . مكتب محاسبة الحكومة الأمريكية . تقرير مكتب محاسبة الحكومة الأمريكية IMTEC 92-26.
  51. 1 2 سكيل، روبرت (يوليو 1992)، "خطأ التقريب وصاروخ باتريوت" (ملف PDF) ، أخبار SIAM ، 25 (4): 11 ، تم الاطلاع عليه بتاريخ 15 نوفمبر 2024
  52. ويلكنسون، جيمس هاردي (8 سبتمبر 2003). "تحليل الأخطاء". في رالستون، أنتوني؛ رايلي، إدوين د.؛ هيمندينجر، ديفيد (محررون). موسوعة علوم الحاسوب . وايلي . ص 669-674 . ISBN  978-0-470-86412-8. Retrieved 2013-05-14.
  53. Einarsson, Bo (2005). Accuracy and reliability in scientific computing. Society for Industrial and Applied Mathematics (SIAM). pp. 50–. ISBN 978-0-89871-815-7. Retrieved 2013-05-14.
  54. 1234Higham, Nicholas John (2002). Accuracy and Stability of Numerical Algorithms (2nd ed.). Society for Industrial and Applied Mathematics (SIAM). pp. 27–28, 110–123, 493. ISBN 978-0-89871-521-7. 0-89871-355-2.
  55. Oliveira, Suely; Stewart, David E. (2006-09-07). Writing Scientific Software: A Guide to Good Style. Cambridge University Press. pp. 10–. ISBN 978-1-139-45862-7.
  56. 12Kahan, William Morton (2005-07-15). Floating-Point Arithmetic Besieged by "Business Decisions"(PDF). IEEE-sponsored ARITH 17, Symposium on Computer Arithmetic (Keynote Address). pp. 6, 18. Archived(PDF) from the original on 2006-03-17. Retrieved 2013-05-23. (NB. Kahan estimates that the incidence of excessively inaccurate results near singularities is reduced by a factor of approx. 1/2000 using the 11 extra bits of precision of double extended.)
  57. Kahan, William Morton (2011-08-03). Desperately Needed Remedies for the Undebuggability of Large Floating-Point Computations in Science and Engineering(PDF). IFIP/SIAM/NIST Working Conference on Uncertainty Quantification in Scientific Computing, Boulder, CO. p. 33. Archived(PDF) from the original on 2013-06-20.
  58. 12Kahan, William Morton; Darcy, Joseph (2001) [1998-03-01]. "How Java's floating-point hurts everyone everywhere"(PDF). Archived(PDF) from the original on 2000-08-16. Retrieved 2003-09-05.
  59. 1234Kahan, William Morton (2000-08-27). "Marketing versus Mathematics"(PDF). pp. 15, 35, 47. Archived(PDF) from the original on 2003-08-15.
  60. Kahan, William Morton (1981-02-12). "Why do we need a floating-point arithmetic standard?"(PDF). p. 26. Archived(PDF) from the original on 2004-12-04.
  61. كاهان، ويليام مورتون (2001-06-04). بيندل، ديفيد (محرر). "ملاحظات محاضرات حول دعم النظام للحوسبة العلمية" (ملف PDF) . مؤرشف (ملف PDF) من الأصل بتاريخ 2013-05-17.
  62. "الحساب العشري العام" . Speleotrove.com . تم الاطلاع عليه بتاريخ 25-04-2012 .
  63. كريستيانسن، توم؛ توركينغتون، ناثان؛ وآخرون (2006). "perlfaq4 / لماذا الدالة int() معطلة؟" . perldoc.perl.org . تم الاطلاع عليه بتاريخ 11 يناير 2011 . 
  64. شيوشوك، جوناثان ريتشارد (1997). "الحسابات الدقيقة التكيفية ذات الفاصلة العائمة والمسندات الهندسية السريعة والقوية" . الهندسة المنفصلة والحسابية . 18 (3): 305-363 . doi : 10.1007/PL00009321 .
  65. كاهان، ويليام مورتون ؛ إيفوري، ميلودي واي. (3 يوليو 1997). "التقريب يُضعف الكابولي المثالي" (ملف PDF) . مؤرشف (ملف PDF) من الأصل بتاريخ 5 ديسمبر 2003.
  66. "التحويل التلقائي إلى متجهات في LLVM" . وثائق LLVM 13. ندعم عمليات اختزال الأعداد العشرية عند استخدام الخيار -ffast-math.
  67. كايلور، آندي (أكتوبر 2024). "نحو الرياضيات السريعة المفيدة" (ملف PDF) .
  68. "FloatingPointMath" . GCC Wiki .
  69. "55522 – -funsafe-math-optimizations ضار بشكل غير متوقع، خاصة مع -shared" . gcc.gnu.org .
  70. "خيارات توليد الكود (مترجم GNU Fortran)" . gcc.gnu.org .
  71. "خطأ في zheevd · المشكلة رقم 43 · Reference-LAPACK/lapack" . GitHub .
  72. بيكر، هايكو؛ دارولوفا، إيفا؛ ميرين، ماغنوس أو.؛ ​​تاتلوك، زاكاري (2019). Icing: دعم تحسينات أسلوب الرياضيات السريعة في مُصرّف مُدقّق . CAV 2019: التحقق بمساعدة الحاسوب. المجلد 11562. الصفحات 155-173 . doi : 10.1007/978-3-030-25543-5_10 .  

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

  • "مسح لتنسيقات الفاصلة العائمة" .(ملاحظة: تقدم هذه الصفحة ملخصًا موجزًا ​​جدًا لتنسيقات الفاصلة العائمة التي تم استخدامها على مر السنين.)
  • مونيو، ديفيد (مايو 2008). "مزالق التحقق من حسابات الفاصلة العائمة" . مجلة ACM للمعاملات في لغات البرمجة والأنظمة . 30 (3). معاملات رابطة آلات الحوسبة (ACM) في لغات البرمجة والأنظمة (TOPLAS): 1-41 . arXiv : cs/0701192 . doi : 10.1145/1353445.1353446 . S2CID 218578808 . (ملاحظة: مجموعة من السلوكيات غير البديهية للفاصلة العائمة على البنى الشائعة، مع آثار على التحقق من البرامج واختبارها.)
  • OpenCores . (ملاحظة: يحتوي هذا الموقع على وحدات IP مفتوحة المصدر للفاصلة العائمة لتنفيذ عمليات الفاصلة العائمة في أجهزة FPGA أو ASIC. يحتوي مشروع double_fpu على شفرة مصدر Verilog لوحدة فاصلة عائمة مزدوجة الدقة. يحتوي مشروع fpuvhdl على شفرة مصدر VHDL لوحدة فاصلة عائمة أحادية الدقة.)
  • فليغال، إريك (2004). "تحسين أداء الأعداد العشرية في مايكروسوفت فيجوال سي++" . شبكة مطوري مايكروسوفت . مؤرشف من الأصل بتاريخ 2017-07-06.