الحساب ذو النقطة الثابتة

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

في تمثيل النقطة الثابتة، يُعبَّر عن الكسر غالبًا بنفس أساس العدد المستخدم في الجزء الصحيح، ولكن باستخدام قوى سالبة للأساس b . أكثر الصيغ شيوعًا هي النظام العشري (الأساس 10) والنظام الثنائي (الأساس 2). يُعرف النظام الثنائي أيضًا باسم القياس الثنائي . بالتالي، إذا تم تخزين n خانة كسرية، ستكون القيمة دائمًا مضاعفًا صحيحًا لـ b n . يمكن أيضًا استخدام تمثيل النقطة الثابتة لحذف الخانات ذات الرتبة المنخفضة من القيم الصحيحة، على سبيل المثال، عند تمثيل قيم الدولار الكبيرة كمضاعفات لـ 1000 دولار (1K).

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

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

التمثيل

مثالعلى تمثيل النقطة الثابتةمع مقياس1/100
القيمة الممثلةالتمثيل الداخلي
0.000
0.550
0.9999
2200
-14.1-1410
314.16031416

التمثيل ذو النقطة الثابتة للعدد الكسري هو في الأساس عدد صحيح يُضرب ضمنيًا بمعامل قياس ثابت. على سبيل المثال، يمكن تخزين القيمة 1.23 في متغير كقيمة صحيحة 123 بمعامل قياس ضمني 1/100. يُمكّن هذا التمثيل وحدات المنطق الحسابي للأعداد الصحيحة من إجراء عمليات حسابية على الأعداد النسبية .

تُمثَّل القيم السالبة عادةً في صيغ الأعداد الثنائية ذات النقطة الثابتة كعدد صحيح مُوَقَّع مُعَبَّر بنظام المتمم الثنائي مع عامل قياس ضمني كما ذُكر أعلاه. تُشير البتة الأكثر أهمية دائمًا إلى إشارة القيمة (1 = سالب، 0 = غير سالب)، حتى لو كان عدد بتات الكسور أكبر من أو يساوي العدد الإجمالي للبتات. على سبيل المثال، العدد الصحيح الثنائي المُوَقَّع ذو 8 بتات ( 1111 0101 ) ² = -11، مع بتات الكسور الضمنية -3 و+5 و+12، يُمثِّل القيم -11/2 -3  = -88، -11/2 5  =-0.343 75 ، و -11/2 12  =−0.002 685 546 875 ، على التوالي.

بدلاً من ذلك، يمكن تمثيل القيم السالبة بعدد صحيح بصيغة الإشارة والمقدار ، وفي هذه الحالة لا تُدرج الإشارة أبدًا ضمن عدد خانات الكسر الضمنية. يُستخدم هذا النوع بشكل أكثر شيوعًا في العمليات الحسابية العشرية ذات الفاصلة الثابتة. وبالتالي، فإن العدد الصحيح العشري ذو الإشارة والمكون من 5 أرقام (−00 025 ) 10 ، مع الأخذ في الاعتبار الأرقام العشرية الضمنية -3 و+5 و+12 ، فإن ذلك يمثل القيم −25/10 −3  =-25000 ، -25/10 5  =-0.000 25 ، و -25/10 12  =−0.000 000 000 025 ، على التوالي.

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

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

اختيار عوامل القياس

لتحقيق كفاءة أكبر، غالبًا ما تُختار عوامل القياس لتكون قوى (موجبة أو سالبة) للأساس b المستخدم لتمثيل الأعداد الصحيحة داخليًا. مع ذلك، غالبًا ما يُحدد التطبيق عامل القياس الأمثل. لذا، يُستخدم عادةً عوامل قياس هي قوى العدد 10 (مثل 1/100 لقيم الدولار) لتسهيل الاستخدام، حتى عند تمثيل الأعداد الصحيحة داخليًا بالنظام الثنائي. تتوافق عوامل القياس العشرية أيضًا مع النظام المتري (SI) ، حيث إن اختيار عامل القياس ذي النقطة الثابتة غالبًا ما يُعادل اختيار وحدة قياس (مثل السنتيمتر أو الميكرون بالنسبة للمتر ).

ومع ذلك، يمكن استخدام عوامل قياس أخرى في بعض الأحيان، على سبيل المثال، يمكن تمثيل جزء من الساعات كعدد صحيح من الثواني؛ أي كرقم ثابت مع عامل قياس 1/3600.

حتى مع أدق عمليات التقريب، قد تحتوي قيم الفاصلة الثابتة المُمثلة بمعامل قياس S على خطأ يصل إلى ±0.5 × S في قيمة العدد الصحيح المُخزنة. لذلك، تُنتج معاملات القياس الأصغر عمومًا نتائج أكثر دقة.

من جهة أخرى، يعني عامل القياس الأصغر نطاقًا أضيق للقيم التي يمكن تخزينها في متغير برنامج معين. أكبر قيمة ثابتة النقطة يمكن تخزينها في متغير هي أكبر قيمة عددية صحيحة يمكن تخزينها فيه، مضروبة في عامل القياس، وينطبق الأمر نفسه على القيمة الدنيا. على سبيل المثال، يوضح الجدول أدناه عامل القياس الضمني S ، والقيمتين الدنيا والقصوى القابلتين للتمثيل V<sub> min</sub> و V <sub>max </sub>، ودقة δ  = S /2 للقيم التي يمكن تمثيلها بتنسيق النقطة الثابتة الثنائية الموقعة 16 بت، وذلك اعتمادًا على عدد بتات الكسر الضمنية f .

معلمات بعض تنسيقات النقطة الثابتة الثنائية الموقعة ذات 16 بت
وSدلتاV minV max
-31/2 - 3 = 84-262 144262 136
0نصف صفر = 10.5-32 768+32 767
5نصف ٥ = ١/٣٢< 0.016-1 024 .000 00+1 023 .968 75
14١/٢ ١٤ = ١/16384<0.000 031-2.000 000 000 000 00+1.999 938 964 843 75
151/2 15 = 1/32768<0.000 016-1.000 000 000 000 000+0.999 969 482 421 875
16١/٢ ١٦ = ١/65 536<0.000 008-0.500 000 000 000 0000+0.499 984 741 210 9375
20نصف ٢٠ = ١/1048576<0.000 0005-0.031 250 000 000 000 000 00+0.031 249 046 325 683 593 75

تُعتبر صيغ الأعداد الثابتة ذات معاملات القياس من الشكل 2 ^n - 1 (أي 1، 3، 7، 15، 31، إلخ) مناسبة لمعالجة الصور ومهام معالجة الإشارات الرقمية الأخرى. فهي توفر تحويلات أكثر اتساقًا بين قيم الأعداد الثابتة والعائمة مقارنةً بمعامل القياس 2 ^ n . وتُطبّق لغة البرمجة جوليا كلا الإصدارين. [ 2 ]

القيم الدقيقة

يمكن تمثيل أي كسر ثنائي a / 2m ، مثل 1/16 أو 17/32، بدقة في نظام الفاصلة الثابتة، باستخدام عامل قياس من قوى العدد اثنين 1/ 2n، حيث n m . مع ذلك، فإن معظم الكسور العشرية مثل 0.1 أو 0.123 هي كسور دورية لانهائية في النظام الثنائي، وبالتالي لا يمكن تمثيلها بهذه الطريقة.

وبالمثل، يمكن تمثيل أي كسر عشري a / 10m ، مثل 1/100 أو 37/1000، بدقة في نظام الفاصلة الثابتة باستخدام عامل قياس من قوى العشرة 1/ 10n، حيث n m . كما يمكن لهذا النظام العشري تمثيل أي كسر ثنائي a / 2m ، مثل 1/8 (0.125) أو 17/32 (0.53125).

وبشكل عام، يمكن تمثيل العدد النسبي a / b ، حيث a و b أوليان نسبيًا و b موجب ، بدقة في نظام النقطة الثابتة الثنائية فقط إذا كان b قوة للعدد 2 ؛ وفي نظام النقطة الثابتة العشرية فقط إذا لم يكن لـ b عوامل أولية أخرى غير 2 أو 5.

مقارنة مع الفاصلة العائمة

قد تكون العمليات الحسابية ذات النقطة الثابتة أسرع أو تستهلك موارد أقل من العمليات الحسابية ذات النقطة العائمة. إذا كان نطاق القيم المراد تمثيلها معروفًا مسبقًا ومحدودًا بدرجة كافية، فإن النقطة الثابتة تستفيد بشكل أفضل من البتات المتاحة. على سبيل المثال، إذا كانت 32 بت متاحة لتمثيل عدد عشري بين 0 و1، فإن تمثيل النقطة الثابتة قد يكون به خطأ أقل من1.2 × 10⁻¹⁰ ، في حين أن تمثيل الفاصلة العائمة القياسي IEEE 754 قد يحتوي على خطأ يصل إلى596 × 10⁻¹⁰ لأن 9 بتات مخصصة لإشارة وأس عامل القياس الديناميكي، وهو غير مستخدم ضمن هذا النطاق المحدود من القيم. بالنسبة لتسجيل صوتي رقمي يتطلب أقل من مع وجود هامش ديناميكي يبلغ 40 ديسيبل ، فإن نظام النقطة الثابتة ذو 32 بت يتمتع بنسبة إشارة إلى ضوضاء أعلى من نظام النقطة العائمة.

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

تفتقر العديد من المعالجات المدمجة إلى وحدة معالجة الفاصلة العائمة (FPU)، لأن وحدات الحساب الصحيحة تتطلب عددًا أقل بكثير من البوابات المنطقية وتستهلك مساحة شريحة أصغر بكثير من وحدة معالجة الفاصلة العائمة؛ كما أن محاكاة برامج الفاصلة العائمة على الأجهزة منخفضة السرعة ستكون بطيئة للغاية بالنسبة لمعظم التطبيقات. كذلك، كانت رقائق المعالجات المركزية لأجهزة الكمبيوتر الشخصية وأجهزة ألعاب الفيديو القديمة ، مثل Intel 386 و 486SX ، تفتقر إلى وحدة معالجة الفاصلة العائمة.

إن الدقة المطلقة (الفرق بين القيم المتتالية) لأي تنسيق نقطة ثابتة تكون ثابتة على كامل النطاق، أي عامل القياس S. في المقابل، فإن الدقة النسبية لتنسيق النقطة العائمة تكون ثابتة تقريبًا على كامل نطاقها، وتتغير ضمن عامل من الأساس b ؛ بينما تتغير دقتها المطلقة بعدة مراتب من حيث الحجم، مثل القيم نفسها.

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

التطبيقات

يُستخدم نظام الأعداد العشرية ذات الفاصلة الثابتة عادةً لتخزين القيم النقدية، حيث تُشكل قواعد التقريب المعقدة للأعداد العشرية ذات الفاصلة العائمة عائقًا في كثير من الأحيان. على سبيل المثال، قام تطبيق إدارة الأموال مفتوح المصدر GnuCash ، المكتوب بلغة C، بالتحول من نظام الفاصلة العائمة إلى نظام الفاصلة الثابتة بدءًا من الإصدار 1.6، لهذا السبب. [ 3 ]

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

يتم استخدام النقطة الثابتة الثنائية في معالجات CORDIC المساعدة من سلسلة STM32G4 وفي خوارزميات تحويل جيب التمام المنفصلة المستخدمة لضغط صور JPEG .

تستخدم الأجهزة الإلكترونية، مثل عدادات الكهرباء والساعات الرقمية، كثيرات الحدود غالبًا للتعويض عن الأخطاء الناتجة، كأخطاء درجة الحرارة أو جهد مصدر الطاقة. تُستخرج المعاملات باستخدام الانحدار متعدد الحدود . تتميز كثيرات الحدود الثنائية ذات النقطة الثابتة بدقة أعلى من كثيرات الحدود ذات النقطة العائمة، وذلك بسرعة عالية باستخدام معالجات مركزية منخفضة التكلفة. وتُقارن الدقة، وهي بالغة الأهمية للأجهزة، بشكل جيد مع حسابات النقطة العائمة ذات البتات المكافئة، إذا تم تقييم كثيرات الحدود ذات النقطة الثابتة باستخدام طريقة هورنر (مثل y = (( ax + b ) x + c ) x + d )) لتقليل عدد مرات التقريب، وإذا استخدمت عمليات الضرب ذات النقطة الثابتة حدود التقريب.

العمليات

الجمع والطرح

لجمع أو طرح قيمتين لهما نفس معامل القياس الضمني، يكفي جمع أو طرح العددين الصحيحين الأصليين؛ ستكون النتيجة بنفس معامل القياس الضمني المشترك، وبالتالي يمكن تخزينها في نفس متغيرات البرنامج التي تحتوي على المعاملات. تُعطي هذه العمليات النتيجة الرياضية الدقيقة، طالما لم يحدث تجاوز - أي طالما يمكن تخزين العدد الصحيح الناتج في متغير البرنامج المُستقبِل . إذا حدث تجاوز، فإنه يحدث كما هو الحال مع الأعداد الصحيحة العادية ذات الإشارة نفسها. في حالتي الأعداد غير المُوقَّعة والمُوقَّعة باستخدام نظام المتمم الثنائي، يُعرف سلوك التجاوز جيدًا باسم المجموعة المنتهية .

إذا كانت المعاملات لها عوامل قياس مختلفة، فيجب تحويلها إلى عامل قياس مشترك قبل العملية.

الضرب

لضرب عددين ثابتين، يكفي ضرب العددين الصحيحين الأساسيين وافتراض أن عامل القياس للنتيجة هو حاصل ضرب عوامل القياس الخاصة بهما.

(p/q) * (r/s) = pr/qs

ستكون النتيجة دقيقة تمامًا، دون تقريب، بشرط ألا تتجاوز سعة المتغير المُستقبِل. (وتحديدًا، في عملية الضرب الصحيح، يكون الناتج ضعف عرض العاملين كحد أقصى).

على سبيل المثال، بضرب العددين 123 مضروبًا في 1/1000 (0.123) و25 مضروبًا في 1/10 (2.5)، نحصل على العدد الصحيح 123 × 25 = 3075 مضروبًا في (1/1000) × (1/10) = 1/10000، أي 3075/10000 = 0.3075. كمثال آخر، بضرب العدد الأول في 155 مضروبًا ضمنيًا في 1/32 (155/32 = 4.84375)، نحصل على العدد الصحيح 123 × 155 = 19065 مضروبًا ضمنيًا في (1/1000) × (1/32) = 1/32000، أي 19065/32000 = 0.59578125.

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

عند استخدام الإزاحة إلى اليمين أو تعليمة القسمة الصحيحة التقليدية (مثل قسمة الأعداد الصحيحة في لغة C و idiv في معمارية x86)، تكون النتيجة مكافئة لعملية القسمة على أقرب عدد صحيح (floor(x/y)). يمكن استخدام طريقة التقريب لتقليل الخطأ الناتج. توجد ثلاثة اختلافات ممكنة بناءً على اختيار طريقة كسر التعادل:

  • يمكن تقريب العدد إلى النصف بإضافة "مُضاف تقريب" يساوي نصف عامل القياس قبل الإزاحة. البرهان: roundup(x/y) = floor(x/y + 0.5) = floor((x + y/2)/y). إذا كانت y = 2^n، فإن هذا يُكافئ (x + 2^(n−1)) >> n (حيث >> تُشير إلى الإزاحة إلى اليمين).
  • التقريب إلى النصف السفلي هو، على سبيل القياس، الجزء السفلي ((x - y/2)/y) أو (x - 2^(n-1)) >> n.
  • تتضمن عملية التقريب من النصف إلى الزوجي اتخاذ قرار إضافي بالإضافة إلى عملية التقريب من النصف إلى الأعلى. وهي أكثر تعقيدًا بعض الشيء، لكنها لا تتطلب أي تفرع على وحدة المعالجة المركزية. [ 4 ]

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

قسم

يمكن فهم قسمة الأعداد ذات الفاصلة الثابتة على أنها قسمة كسرين قد يكون مقامهما مختلفًا (معاملات قياس). فعندما يكون p q و r s (حيث pq و r أعداد صحيحة)، فإن الطريقة البسيطة هي إعادة ترتيب الكسر لتكوين معامل قياس جديد (s/q):

(p/q) / (r/s) = (p÷r) / (s÷q)

على سبيل المثال، قسمة 3456 مضروبًا في 1/100 (34.56) و1234 مضروبًا في 1/1000 (1.234) ينتج عنها العدد الصحيح 3456÷1234 = 3 (بعد التقريب) بمعامل قياس (1/100)/(1/1000) = 10، أي 30. كمثال آخر، قسمة العدد الأول على 155 مضروبًا ضمنيًا في 1/32 (155/32 = 4.84375) ينتج عنها العدد الصحيح 3456÷155 = 22 (بعد التقريب) بمعامل قياس ضمني (1/100)/(1/32) = 32/100 = 8/25، أي 22×32/100 = 7.04.

مع تشابه قيمتي s و q، تُنتج الخوارزمية المذكورة أعلاه عامل قياس خشنًا للغاية. يمكن تحسين ذلك بتحويل المقسوم أولًا إلى عامل قياس أصغر. لنفترض أننا قللنا عامل القياس بمقدار n مرة، فسنحسب بدلًا من ذلك:

(p/q) / (r/s) = (np/nq) / (r/s) = (np÷r) / (s÷nq)

على سبيل المثال، إذا تم تمثيل a = 1.23 بالصيغة 123 بمعامل تكبير 1/100، وتم تمثيل b = 6.25 بالصيغة 6250 بمعامل تكبير 1/1000، فإن القسمة البسيطة للعددين الصحيحين تُعطي 123 ÷ 6250 = 0 (بعد التقريب) بمعامل تكبير (1/100)/(1/1000) = 10. إذا تم تحويل a أولاً إلى 1,230,000 بمعامل تكبير 1/1000000، فستكون النتيجة 1,230,000 ÷ 6250 = 197 (بعد التقريب) بمعامل تكبير 1/1000 (0.197). القيمة الدقيقة 1.23/6.25 هي 0.1968.

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

تحويل المقياس

في الحوسبة ذات النقطة الثابتة، غالباً ما يكون من الضروري تحويل قيمة إلى عامل قياس مختلف. هذه العملية ضرورية، على سبيل المثال:

  • لتخزين قيمة في متغير برنامج له عامل قياس ضمني مختلف؛
  • لتحويل قيمتين إلى نفس عامل القياس، بحيث يمكن جمعهما أو طرحهما؛
  • لاستعادة عامل القياس الأصلي لقيمة ما بعد ضربها أو قسمتها على قيمة أخرى؛
  • لتحسين دقة نتيجة القسمة؛
  • لضمان أن يكون عامل القياس للمنتج أو خارج القسمة عبارة عن قوة بسيطة مثل 10 ن أو 2 ن ؛
  • لضمان إمكانية تخزين نتيجة العملية في متغير البرنامج دون حدوث تجاوز؛
  • لتقليل تكلفة الأجهزة التي تعالج بيانات النقطة الثابتة.

لتحويل عدد من نوع ذي فاصلة ثابتة بمعامل قياس R إلى نوع آخر بمعامل قياس S ، يجب ضرب العدد الصحيح الأصلي بنسبة R / S. على سبيل المثال، لتحويل القيمة 1.23 = 123/100 من معامل قياس R = 1/100 إلى معامل قياس S = 1/1000، يجب ضرب العدد الصحيح 123 في (1/100)/(1/1000) = 10، ما ينتج عنه التمثيل 1230/1000.

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

إذا لم يقسم S العدد R (على وجه الخصوص، إذا كان عامل القياس الجديد S أكبر من R الأصلي )، فقد يتعين تقريب العدد الصحيح الجديد .

على وجه الخصوص، إذا كان r و s متغيرين ثابتين مع عوامل قياس ضمنية R و S ، فإن العملية rr × s تتطلب ضرب الأعداد الصحيحة المعنية وقسمة الناتج صراحةً على S. قد يلزم تقريب الناتج، وقد يحدث تجاوز.

على سبيل المثال، إذا كان عامل القياس الشائع هو 1/100، فإن ضرب 1.23 في 0.25 يستلزم ضرب 123 في 25 للحصول على 3075 بعامل قياس وسيط قدره 1/10000. وللعودة إلى عامل القياس الأصلي 1/100، يجب ضرب العدد الصحيح 3075 في 1/100، أي قسمته على 100، للحصول إما على 31 (0.31) أو 30 (0.30)، وذلك حسب طريقة التقريب المستخدمة.

وبالمثل، فإن العملية rr / s ستتطلب قسمة الأعداد الصحيحة وضرب الناتج صراحةً في S. وقد يحدث التقريب و/أو تجاوز السعة هنا أيضًا.

التحويل من وإلى الأعداد العشرية

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

لتحويل عدد ذي فاصلة ثابتة إلى عدد ذي فاصلة عائمة، يمكن تحويل العدد الصحيح إلى عدد ذي فاصلة عائمة ثم قسمته على عامل القياس S. قد يتطلب هذا التحويل تقريبًا إذا كانت القيمة المطلقة للعدد الصحيح أكبر من 2^ 24 (للأعداد الثنائية أحادية الدقة وفقًا لمعيار IEEE) أو أكبر من 2^ 53 (للأعداد ذات الدقة المزدوجة). قد يحدث تجاوز أو نقص في القيمة إذا كانت القيمة المطلقة لـ S كبيرة جدًا أو صغيرة جدًا ، على التوالي.

دعم الأجهزة

التحجيم وإعادة التطبيع

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

استخدمت الحواسيب القديمة، مثل IBM 1620 و Burroughs B3500، نظامًا ثنائيًا عشريًا (BCD) لتمثيل الأعداد الصحيحة، أي النظام العشري (الأساس 10) حيث يُشفّر كل رقم عشري بشكل مستقل باستخدام 4 بتات. وقد لا تزال بعض المعالجات، مثل المتحكمات الدقيقة، تستخدم هذا النظام. في هذه الأجهزة، يمكن تحويل عوامل القياس العشري عن طريق إزاحة البتات و/أو معالجة عناوين الذاكرة.

توفر بعض معمارية معالجة الإشارات الرقمية دعمًا أصليًا لتنسيقات محددة للأعداد ذات الفاصلة الثابتة، مثل الأعداد الموقعة ذات n بت مع n -1 بت كسري (والتي قد تتراوح قيمها بين -1 و+1 تقريبًا). قد يشمل هذا الدعم تعليمة ضرب تتضمن إعادة التطبيع - أي تحويل ناتج الضرب من 2 ^n -2 إلى n -1 بت كسري. إذا لم توفر وحدة المعالجة المركزية هذه الميزة، فيجب على المبرمج حفظ الناتج في سجل أو متغير مؤقت ذي سعة كافية، وكتابة تعليمات إعادة التطبيع بشكل صريح.

الفائض

يحدث تجاوز السعة عندما تكون نتيجة عملية حسابية أكبر من أن تُخزَّن في منطقة التخزين المخصصة. في عمليتي الجمع والطرح، قد تتطلب النتيجة بتًا واحدًا إضافيًا عن عدد المعاملات. في عملية ضرب عددين صحيحين غير مُوَقَّعين، أحدهما مكون من m بت والآخر من n بت، قد تحتوي النتيجة على m + n بت.

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

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

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

دعم لغات الحاسوب

توفر بعض لغات البرمجة دعمًا صريحًا للأعداد ذات الفاصلة الثابتة، ولا سيما PL/I و COBOL و Ada و JOVIAL و Coral 66. إذ توفر هذه اللغات أنواع بيانات ذات فاصلة ثابتة ، مع عامل تحويل ثنائي أو عشري. ويقوم المترجم تلقائيًا بإنشاء التعليمات البرمجية اللازمة لإجراء تحويلات التحويل المناسبة عند إجراء العمليات على هذه الأنواع من البيانات، سواء عند قراءة المتغيرات أو كتابتها، أو عند تحويل القيم إلى أنواع بيانات أخرى، مثل الأعداد العشرية.

صُممت معظم هذه اللغات بين عامي 1955 و1990. أما اللغات الحديثة، فلا تُوفر عادةً أنواع بيانات ذات فاصلة ثابتة أو دعمًا لتحويل عامل القياس. وينطبق هذا أيضًا على العديد من اللغات القديمة التي لا تزال شائعة الاستخدام، مثل FORTRAN و C و C++ . وقد أدى التوفر الواسع لمعالجات الفاصلة العائمة السريعة، ذات السلوك القياسي الصارم، إلى تقليل الطلب على دعم الفاصلة الثابتة الثنائية بشكل كبير. وبالمثل، فإن دعم الفاصلة العائمة العشرية في بعض لغات البرمجة، مثل C# و Python ، قد ألغى معظم الحاجة إلى دعم الفاصلة الثابتة العشرية. وفي الحالات القليلة التي تتطلب عمليات ذات فاصلة ثابتة، يُمكن للمبرمج تنفيذها، مع تحويل القياس الصريح، في أي لغة برمجة تدعم أنواع الأعداد الصحيحة الصريحة.

من ناحية أخرى، تدعم جميع قواعد البيانات العلائقية وصيغة SQL العمليات الحسابية العشرية ذات الفاصلة الثابتة وتخزين الأرقام. يتميز PostgreSQL بخاصية فريدة.رقمينوع لتخزين الأرقام بدقة تصل إلى 1000 رقم. [ 5 ]

علاوة على ذلك، نشرت المنظمة الدولية للمعايير (ISO) في عام 2008 مسودة تقرير فني لتوسيع لغة البرمجة C لتشمل أنواع بيانات النقطة الثابتة، وذلك لتحسين أداء البرامج التي تعمل على معالجات الإشارات الرقمية المدمجة. وقد اقتُرح نوعان رئيسيان من أنواع البيانات: _Fract (جزء كسري بدقة لا تقل عن 7 بتات) و_Accum (جزء كسري بدقة لا تقل عن 4 بتات من الجزء الصحيح). [ 6 ] وتدعم مجموعة مترجمات جنو (GCC) هذه المسودة . [ 7 ] [ 8 ]

أمثلة تفصيلية

الضرب العشري ذو النقطة الثابتة

لنفترض أن هناك عملية الضرب التالية مع عددين ثابتين، كل منهما مكون من 3 منازل عشرية.

(10.500)(1.050)=1×10.500+0.050×10.500=10.500+0.525000=11.025000{\displaystyle {\begin{aligned}(10.500)(1.050)&=1\times 10.500+0.050\times 10.500\\&=10.500+0.525000=11.025000\end{aligned}}}

لاحظ كيف أننا نعرض الأصفار اللاحقة لوجود ثلاثة منازل عشرية. ولإعادة وصف هذه العملية كضرب عدد صحيح، يجب علينا أولاً الضرب في1000 (=103){\displaystyle 1000\ (=10^{3})}بعد نقل جميع المنازل العشرية إلى منازل صحيحة، سنقوم بالضرب في1/1000 (=10-3){\displaystyle 1/1000\ (=10^{-3})}لإعادتها. تبدو المعادلة الآن كالتالي:

(10.500)(103)(1.050)(103)(10-3)(10-3)=(10500)(1050)(10-6)=11025٠٠٠(10-6)=11.025000{\displaystyle {\begin{aligned}(10.500)(10^{3})(1.050)(10^{3})(10^{-3})(10^{-3})&=(10500)(1050)(10^{-6})\\&=11\,025\,000(10^{-6})\\&=11.025000\end{aligned}}}

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

10=8+2=23+211=200.5=2-10.05=0.00001100112{\displaystyle {\begin{aligned}10&=8+2=2^{3}+2^{1}\\1&=2^{0}\\0.5&=2^{-1}\\0.05&=0.0000110011_{2}\end{aligned}}}

وهكذا تصبح عملية الضرب لدينا

(1010.100)(23)(1.0000110011)(210)(2-13)=(1010100)(10000110011)(2-13)=(10110000010111100)(2-13)=1011.0000010111100{\displaystyle {\begin{aligned}(1010.100)(2^{3})(1.0000110011)(2^{10})(2^{-13})&=(1010100)(10000110011)(2^{-13})\\&=(10110000010111100)(2^{-13})\\&=1011.0000010111100\end{aligned}}}

هذا يُقرّب إلى 11.023 بثلاثة أرقام بعد الفاصلة العشرية.

الضرب الثنائي ذو النقطة الثابتة

لنفترض أننا نريد حساب حاصل ضرب 1.2 و 5.6 باستخدام نظام الفاصلة الثابتة الثنائي و16 بتًا للكسر. لتمثيل هذين العددين، نضربهما في 2^ 16، فنحصل على 78643.2 و 367001.6؛ ثم نقرب هاتين القيمتين إلى أقرب عدد صحيح، فنحصل على 78643 و 367002. يمكن تمثيل هذين العددين بسهولة في كلمة مكونة من 32 بت بنظام المتمم الثنائي.

بضرب هذين العددين الصحيحين معًا نحصل على العدد الصحيح 28862138286 ذي 35 بتًا، مع 32 بتًا للكسر، دون أي تقريب. لاحظ أن تخزين هذه القيمة مباشرةً في متغير عدد صحيح ذي 32 بتًا سيؤدي إلى تجاوز السعة وفقدان البتات الأكثر أهمية. عمليًا، يُفضل تخزينها في متغير أو سجل عدد صحيح ذي 64 بتًا مُوَقَّعًا .

إذا كان المطلوب تخزين النتيجة بنفس تنسيق البيانات، مع 16 بتًا للكسر، فيجب قسمة هذا العدد الصحيح على 2^ 16 ، ما يعطي تقريبًا 440401.28 ، ثم تقريبه إلى أقرب عدد صحيح. يمكن تحقيق ذلك بإضافة 2^ 15 ثم إزاحة النتيجة بمقدار 16 بتًا. النتيجة هي 440401 ، والتي تمثل القيمة 6.719985961914062.5 . مع مراعاة دقة التنسيق، يُفضل التعبير عن هذه القيمة على النحو التالي: 6.719986 ± 0.000008 ( دون احتساب الخطأ الناتج عن تقريب المعاملات). ستكون النتيجة الصحيحة 1.2 × 5.6 = 6.72 .

لمثال أكثر تعقيدًا، لنفترض أن العددين 1.2 و5.6 ممثلان بنظام الفاصلة الثابتة 32 بت، مع 30 و20 بتًا للكسر على التوالي. بضربهما في 2^ 30 و2^20 نحصل على 1288490188.8 و 5872025.6، والتي تُقرّب إلى 1288490189 و 5872026 على التوالي . يظل كلا العددين مناسبًا لمتغير عدد صحيح مُوَقَّع 32 بت ، ويمثلان الكسور .

1. 200 000 000 186 264 514 923 095 703 125 و
5. 600 000 381 469 726 562 50

ناتج ضربهما هو (بالضبط) العدد الصحيح المكون من 53 بت وهو 7566047890552914 ، والذي يحتوي على 30 + 20 = 50 بتًا للكسر الضمني ، وبالتالي يمثل الكسر .

6. 720 000 458 806 753 229 623 609 513 510

إذا اخترنا تمثيل هذه القيمة بصيغة ثابتة ذات 16 بت مع 8 بتات للكسر، فيجب علينا قسمة حاصل ضرب الأعداد الصحيحة على 2^ 50 - 8 = 2^ 42 وتقريب الناتج؛ ويمكن تحقيق ذلك بإضافة 2^ 41 وإزاحة الناتج بمقدار 42 بتًا. والنتيجة هي 1720، والتي تمثل القيمة 1720/2 ^8 = 6.71875 ، أو بالأحرى الفترة بين 3439/2 ^9 و3441/2^ 9 (حوالي 6.719 ± 0.002).

الرموز

استُخدمت رموز مختلفة لتحديد معلمات تنسيق النقطة الثابتة بإيجاز. في القائمة التالية، يُمثل f عدد البتات الكسرية، وm عدد بتات القيمة المطلقة أو الصحيحة، وs عدد بتات الإشارة (0/1 أو أي تمثيل بديل آخر)، و b العدد الإجمالي للبتات.

  • تم تعريف ترميز Q بواسطة شركة تكساس إنسترومنتس . [ 9 ] يُستخدم هذا الترميز لتحديد قيمة ثنائية ذات نقطة ثابتة مُوقّعة تحتوي على f بتات كسرية؛ على سبيل المثال، يُحدد عددًا صحيحًا مُوقّعًا مُدوّنًا بنظام المتمم الثنائي بمعامل قياس 1/2 15. يُحدد هذا الترميز أيضًا أن العدد يحتوي على m بت في الجزء الصحيح من القيمة، باستثناء بت الإشارة. وبالتالي، يصف هذا الترميز تنسيقًا ثنائيًا ذا نقطة ثابتة يحتوي على بت واحد صحيح و30 بتًا كسريًا، والذي يمكن تخزينه كعدد صحيح ذي 32 بت بنظام المتمم الثنائي بمعامل قياس 1/2 30. [ 9 ] [ 10 ]QfQ15Qm.fQ1.30
    • استخدمت شركة ARM ترميزًا مشابهًا ، باستثناء أنها تحسب بت الإشارة في قيمة m ؛ لذا سيتم تحديد نفس التنسيق أعلاه على النحو التالي Q2.30: [ 11 ] [ 12 ]
    • يستخدم اقتراح Embedded C الرمز .f للكسر غير المُوَقَّع، والرمز s .f للكسر المُوَقَّع، والرمز mf للمُجمِّع غير المُوَقَّع، والرمز s m.f للمُجمِّع المُوَقَّع. يُترجم هذا ما سبق إلى s1.30، مع أن هذا ليس نوعًا صالحًا للكسر أو المُجمِّع: في الإصدارات الصالحة، يكون m على الأقل 4، واعتمادًا على النوع الأساسي ، يكون f على الأقل 7 أو 15 أو 23. لاحظ أن s غير مائل: فهو مُضاف كحرف عادي.
  • كانت لغة برمجة كوبول تدعم في الأصل الأعداد العشرية ذات الدقة الثابتة مع حجم ونطاق عشري اختياريين، وكان يتم تحديد تنسيقها "رسوميًا" باستخدام توجيه PIC . على سبيل المثال، PIC S9999V99تم تحديد عدد صحيح عشري مكون من 6 أرقام مع رقمين كسريين عشريين. [ 13 ]
  • يُستخدم هذا التركيب في لغة البرمجة PL/I لتحديد نوع بيانات ثنائي مُوقّع ذي نقطة ثابتة، يتكون من p بت (باستثناء الإشارة) و f بت في الجزء الكسري؛ أي عدد صحيح مُوقّع مكون من p + 1 بت بمعامل قياس 1/2 f . يمكن أن يكون هذا المعامل موجبًا أو سالبًا. يمكن تحديد COMPLEX بدلًا من REAL ، و DECIMAL بدلًا من BINARY للأساس 10.REAL FIXED BINARY (p,f)
  • في لغة برمجة آدا ، يُمكن تحديد نوع البيانات العددية، على سبيل المثال، باستخدام `. تُترجم الحدود العشرية إلى القوة التالية للعدد اثنين، مما يعني تمثيلًا ثابت النقطة يتكون من عدد صحيح ثنائي مُوقّع بصيغة المتمم الثنائي، مع 8 بتات على الأقل للكسر (مما يوفر عامل قياس 1/256) و7 بتات للإشارة والمقدار (مما يضمن نطاقًا فعليًا من -64.00 إلى ما يقارب +64.00): أي ما لا يقل عن 15 بتًا إجمالًا. في حاسوب ذي 16 بت، يُخصص البت المتبقي للجزء الكسري. كما يُسمح بقيود النطاق غير المتماثلة، [ 14 ] على الرغم من أن التنفيذ الأساسي يظل متماثلًا حول الصفر. [ 15 ] تسمح الإصدارات الأحدث من آدا بتحديد عامل قياس دقيق (بما في ذلك العوامل غير القوة للعدد اثنين) باستخدام (تحديد الجانب)، أو، إذا كان العامل قوة للعدد 10، من خلال نقطة ثابتة عشرية.typeFisdelta0.005range-50.0..50.0 'Small => 0.005
  • يُستخدم هذا الترميز للدلالة على صيغة ثنائية ثابتة تتكون من m بت في الجزء الصحيح، بينما تمثل بقية الكلمة (عادةً 32 بت) بتات كسرية. على سبيل المثال، القيمتان القصوى والدنيا اللتان يمكن تخزينهما في عدد مُوَقَّع هما ≈32767.9999847 و −32768.0 على التوالي.BmB16
  • اعتادت شركة VisSim أن تُشير إلى قيمة ثنائية ثابتة النقطة بإجمالي b بتات و m بتات في الجزء الصحيح؛ أي عدد صحيح مكون من b بتات بمعامل قياس 1/2 bm . وبالتالي ، فإن هذا يعني عددًا مكونًا من 16 بتًا، حيث يمثل الجزء الصحيح بتًا واحدًا، بينما يمثل الجزء الكسري 15 بتًا. [ 16 ]fxm.bfx1.16
  • يستخدم دليل مستخدم PS2 GS ( "مُركِّب الرسوميات" ) الترميز ، حيث يُحدد s وجود بت الإشارة (0 أو 1). [ 17 ] على سبيل المثال، يُمثل 0:5:3 عددًا صحيحًا غير مُوقَّع من 8 بتات بمعامل قياس 1/2 3 .s:m:f
  • تستخدم لغة برمجة LabVIEW الترميز لتحديد معلمات أعداد النقطة الثابتة من نوع FXP. يمكن أن يكون العنصر s إما '+' أو '±'، للدلالة على عدد غير مُوَقَّع أو عدد مُوَقَّع بنظام المتمم الثنائي، على التوالي. يُمثل العنصر b العدد الإجمالي للبتات، بينما يُمثل m عدد البتات في الجزء الصحيح.<s,b,m>

أمثلة على تطبيقات البرمجيات

  • يستخدم تنسيق خط TrueType الشائع نظامًا ثنائيًا ثابت النقطة بتوقيع 32 بت، مع 26 بتًا على يسار الفاصلة العشرية لبعض القيم العددية في تعليماته. [ 18 ] وقد تم اختيار هذا التنسيق لتوفير الحد الأدنى من الدقة المطلوبة للتلميح ولأسباب تتعلق بالأداء. [ 19 ]
  • باستثناء جهاز نينتندو 64 ، تستخدم جميع ألعاب الجيل الخامس ثلاثية الأبعاد ، بما في ذلك 3DO وبلاي ستيشن وسيجا ساترن وأتاري جاغوار [ 20 ] ، حسابات النقطة الثابتة، نظرًا لافتقار هذه الأنظمة لوحدات الفاصلة العائمة. يدعم معالج التحويل المساعد في بلاي ستيشن نظام النقطة الثابتة 16 بت مع 12 بت للكسر، بينما استخدمت معالجات VDP المساعدة في سيجا ساترن نظام النقطة الثابتة 32 بت، مع تخصيص 16 بت للكسر.
  • يستخدم برنامج TeX ، وهو برنامج تنضيد نصوص شائع الاستخدام بين العلماء والرياضيين، نظامًا ثنائيًا ثابت النقطة مكونًا من 32 بت، مع 16 بتًا للكسر، لحساب جميع المواضع. تُفسَّر القيم على أنها كسور من نقطة الطباعة . أما ملفات قياس خطوط TeX فتستخدم أرقامًا ثابتة النقطة مكونة من 32 بت، مع 12 بتًا للكسر.
  • تُعدّ Tremor و Toast و MAD مكتبات برمجية تُستخدم لفك تشفير تنسيقات الصوت Ogg Vorbis و GSM Full Rate و MP3 على التوالي. وتستخدم هذه البرامج الترميزية حسابات الفاصلة الثابتة لأن العديد من أجهزة فك تشفير الصوت لا تحتوي على وحدة معالجة الفاصلة الثابتة (FPU).
  • يستخدم ضاغط الصوت WavPack غير المضغوط حسابات النقطة الثابتة. وقد بُرِّر هذا الاختيار، من بين أمور أخرى، بالقلق من أن قواعد تقريب الفاصلة العائمة المختلفة في الأجهزة المختلفة قد تُفسد طبيعة الضغط غير المضغوط. [ 21 ]
  • توفر مكتبة Nest Labs Utilities، [ 22 ] مجموعة محدودة من وحدات الماكرو والوظائف للأرقام ذات الفاصلة الثابتة، خاصة عند التعامل مع هذه الأرقام في سياق أخذ عينات المستشعر ومخرجات المستشعر.
  • تتضمن مواصفات OpenGL ES 1.x ملف تعريف النقطة الثابتة، حيث أنها واجهة برمجة تطبيقات موجهة للأنظمة المدمجة، والتي لا تحتوي دائمًا على وحدة معالجة النقطة العائمة (FPU).
  • برنامجا dc و bc عبارة عن آلات حاسبة ذات دقة تعسفية ، لكنهما لا يحتفظان إلا بعدد ثابت (يحدده المستخدم) من الأرقام الكسرية.
  • يمثل Fractint الأرقام كأرقام ذات نقطة ثابتة Q2.29 ، [ 23 ] لتسريع الرسم على أجهزة الكمبيوتر القديمة المزودة بمعالجات 386 أو 486SX ، والتي كانت تفتقر إلى وحدة معالجة الفاصلة العائمة (FPU).
  • كانت لعبة Doom آخر لعبة تصويب من منظور الشخص الأول من تطوير شركة id Software تستخدم نظام 16.16 بت في جميع عملياتها الحسابية غير الصحيحة، بما في ذلك نظام الخرائط، والهندسة، والعرض، وحركة اللاعب. ولا يزال هذا النظام مستخدمًا في نسخ Doom الحديثة .
  • تحتوي لغة البرمجة Q# لأجهزة الكمبيوتر الكمومية Azure ، التي تنفذ بوابات المنطق الكمومي ، على مكتبة رقمية قياسية لإجراء العمليات الحسابية ذات النقطة الثابتة على سجلات الكيوبتات . [ 24 ]

انظر أيضاً

مراجع

  1. "ما الفرق بين تنسيقات النقطة الثابتة، والنقطة العائمة، والتنسيقات العددية؟" . التصميم الإلكتروني . 2017-08-31.
  2. توثيق لغة البرمجة جوليا لحزمة FixedPointNumbers .
  3. "ما الجديد؟" . code.gnucash.org . تم الاطلاع عليه بتاريخ 10-09-2025 .
  4. دانيال ليمير، "تقريب الأعداد الصحيحة إلى أعداد زوجية بكفاءة"، في مدونة دانيال ليمير، 16 أبريل 2020، https://lemire.me/blog/2020/04/16/rounding-integers-to-even-efficiently/ .
  5. دليل PostgreSQL، القسم 8.1.2. أرقام ذات دقة عشوائية
  6. JTC1/SC22/WG14 (2008)، حالة TR 18037: لغة C المضمنة
  7. ويكي GCC، دعم العمليات الحسابية ذات النقطة الثابتة
  8. باستخدام GCC، القسم 5.13 أنواع النقطة الثابتة
  9. 1 2 "الملحق أ.2". مرجع مبرمج مكتبة معالجة الإشارات الرقمية TMS320C64x (ملف PDF) . دالاس، تكساس، الولايات المتحدة الأمريكية: شركة تكساس إنسترومنتس . أكتوبر 2003. SPRU565. مؤرشف (ملف PDF) من الأصل بتاريخ 22-12-2022 . تم الاطلاع عليه بتاريخ 22-12-2022 .
  10. "مسرد مصطلحات أدوات النقطة الثابتة من MathWorks" . mathworks.com . مؤرشف من الأصل بتاريخ 16 مارس 2011. تم الاطلاع عليه بتاريخ 28 يناير 2011 .
  11. "دليل أدوات تصحيح الأخطاء AXD وarmsd لمجموعة أدوات تطوير ARM" . 1.2. شركة ARM المحدودة . 2001 [1999]. الفصل 4.7.9. AXD > تسهيلات AXD > تنسيق البيانات > تنسيق Q. ARM DUI 0066D.{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  12. "الفصل 4.7.9. AXD > تسهيلات AXD > تنسيق البيانات > تنسيق Q". دليل مصححات أخطاء RealView Development Suite AXD وarmsd (ملف PDF) . الإصدار 3.0. شركة ARM المحدودة . 2006 [1999]. الصفحات 4-24 . ARM DUI 0066G. مؤرشف (ملف PDF) من النسخة الأصلية بتاريخ 2017-11-04. 
  13. شركة IBM، " العناصر الرقمية ". موقع توثيق على الإنترنت، تم الوصول إليه في 2021-07-05.
  14. وثائق Ada 83: " الأساس المنطقي، 5.3.2: أنواع النقطة الثابتة ". تم الاطلاع عليها بتاريخ 2021-07-05.
  15. "أنواع النقطة الثابتة" .
  16. "VisSim أصبح الآن solidThinking Embed" . www.vissim.com . شركة solidThinking.
  17. دليل مستخدم PS2 GS، الفصل 7.1 "ملاحظات توضيحية"
  18. "مجموعة تعليمات TrueType: أنواع البيانات" . 2020-09-22.
  19. " [ فريتايب ] لماذا 26.6 ؟" . 
  20. "محاكي دولفين" . محاكي دولفين . 15-03-2014.
  21. "الوصف الفني لـ WavPack" . www.wavpack.com . تم الاطلاع عليه بتاريخ 13 يوليو 2015 .
  22. مكتبة أدوات Nest Labs
  23. "Fractint, A Little Code" . مؤرشف من الأصل بتاريخ 27-10-2010 . تم الاطلاع عليه بتاريخ 24-10-2005 .
  24. "مقدمة إلى مكتبة الكميات العددية" . تم الاطلاع عليه بتاريخ 13-11-2019 .

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