نوع البيانات العشري

تُوفّر بعض لغات البرمجة (أو مُترجماتها) نوع بيانات عشري مُدمج (أولي) أو مكتبة لتمثيل الكسور العشرية غير الدورية مثل 0.3 و -1.17 دون تقريب، ولإجراء العمليات الحسابية عليها. ومن الأمثلة على ذلك decimal.Decimalنوع البيانات `<T> num7.Num` في بايثون ، وأنواع مماثلة تُوفّرها لغات أخرى.

الأساس المنطقي

تدعم معظم لغات البرمجة الأعداد الكسرية كأعداد عشرية أو أعداد ثابتة . مع ذلك، عادةً ما تُقيد هذه التمثيلات المقام بقوى العدد اثنين. لا يمكن تمثيل معظم الكسور العشرية (أو معظم الكسور عمومًا) بدقة ككسر مقامه قوة من قوى العدد اثنين. على سبيل المثال، يمكن تمثيل الكسر العشري البسيط 0.3 ( 3/10 ) على النحو التالي : 5404319552844595/18014398509481984 ( 0.299999999999999988897769) . يُسبب هذا النقص في الدقة العديد من المشاكل المألوفة للمبرمجين ذوي الخبرة. على سبيل المثال، قد تُقيّم العبارة بشكل غير بديهي إلى قيمة خاطئة في بعض الأنظمة، نظرًا لعدم دقة تمثيل الأعداد العشرية.0.1 * 7 == 0.7

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

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

تسمح اللغات التي تدعم نوع البيانات الكسرية عادةً بإنشاء قيمة من عددين صحيحين، بدلاً من عدد عشري ذي أساس 2، وذلك لتجنب فقدان الدقة الذي قد ينتج عن الأخير. وعادةً ما تُوسّع العمليات الحسابية الأساسية ( + ، - ، × ، ÷ ، قوى الأعداد الصحيحة ) والمقارنات ( = ، < ، > ، ، ، ) لتشمل هذه القيم، إما بشكل مباشر أو من خلال خاصية تحميل المعاملات التي توفرها اللغة. ويمكن للمترجم ترجمة هذه العمليات إلى سلسلة من تعليمات الآلة للأعداد الصحيحة ، أو إلى استدعاءات مكتبية . وقد يمتد الدعم ليشمل عمليات أخرى، مثل التنسيق، والتقريب إلى عدد صحيح أو عدد عشري ، وما إلى ذلك.

التنسيقات القياسية

يحدد معيار IEEE 754 ثلاثة أنواع قياسية من البيانات العشرية ذات الفاصلة العائمة بدقة مختلفة، والتي تم تقديمها في مراجعة عام 2008 للمعيار (والتي تم اعتمادها أيضًا كمعيار ISO/IEC/IEEE 60559:2011):

الدعم اللغوي

  • تحتوي لغة C# على نوع بيانات مدمج يُسمى decimal، ويتكون من 128 بت ، مما ينتج عنه 28-29 رقمًا معنويًا. ويتراوح نطاقه التقريبي من ±1.0  ×  10⁻²⁸ إلى ±7.9228 × 10²⁸ . [ 1 ]  
  • ابتداءً من الإصدار 2.4 من بايثون، تتضمن المكتبة القياسية لبايثون فئة Decimal في الوحدة النمطية decimal . [ 2 ]
  • تتضمن المكتبة القياسية للغة روبي فئة BigDecimal في الوحدة النمطية bigdecimal .
  • تتضمن مكتبة جافا القياسية java.math.BigDecimalفئة.
  • في لغة Objective-C ، توفر واجهات برمجة التطبيقات Cocoa و GNUstep فئة ونوع بيانات C لتمثيل الأعداد العشرية التي يصل طول الجزء العشري فيها إلى 38 رقمًا، ويكون الأس من -128 إلى 127.NSDecimalNumberNSDecimal
  • تدعم بعض أنظمة IBM وأنظمة SQL تنسيق DECFLOAT مع التنسيقين الأكبر حجماً على الأقل. [ 3 ]
  • يتضمن نوع البيانات الجديد DECFLOAT في لغة ABAP تنسيقات decimal64 (بصيغة DECFLOAT16) و decimal128 (بصيغة DECFLOAT34). [ 4 ]
  • يدعم PL/I بشكل أصلي كلاً من البيانات العشرية ذات النقطة الثابتة والبيانات العشرية ذات النقطة العائمة.
  • توفر مجموعة مترجمات GNU (gcc) دعمًا للأعداد العشرية كامتداد للغتين C و C++. [ 5 ]

انظر أيضاً

مراجع

  1. "أنواع الأرقام ذات الفاصلة العائمة - مرجع C#" . 29 سبتمبر 2022.
  2. "Decimal — Decimal fixed point and float point aritistic — Python 3.10.0 documentation" .
  3. "إدارة البيانات" . شركة آي بي إم .
  4. "كيف يُساعد نوع بيانات ABAP الجديد DECFLOAT في إجراء العمليات الحسابية المعقدة؟" « SAP Ignite" . مؤرشف من الأصل بتاريخ 9 أغسطس 2012. تم الاطلاع عليه بتاريخ 28 يوليو 2012 . 
  5. "دليل GCC" . 6.13 أنواع الأرقام العشرية العائمة.