أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

حساب الفاصلة العائمة قد يعطي نتائج غير دقيقة في Excel‏

الموجز
تتناول هذه المقالة الطريقة التي يقوم بها برنامج Microsoft Excel بتخزين أرقام الفاصلة العائمة وحسابها. قد يؤثر ذلك على نتائج بعض الأرقام أو الصيغ نتيجة التقريب واقتطاع البيانات أو أي منهما.

نظرة عامة

تم تصميم برنامج Microsoft Excel بمواصفات IEEE 754 التي تتعلق بتخزين أرقام الفاصلة العائمة وحسابها. يشير IEEE إلى "معهد مهندسي الكهرباء والتقنية الإلكترونية"، وهو كيان عالمي يقوم بتحديد مقاييس لبرامج أجهزة الكمبيوتر ومكوناتها بالإضافة إلى أشياء أخرى. كما تعد مواصفات 754 إحدى المواصفات المعتمدة على نطاق واسع جدًا التي تتناول كيفية تخزين أرقام الفاصلة العائمة على جهاز كمبيوتر ثنائي. كما تتميز بأنها واسعة الانتشار ويرجع ذلك إلى أنها تسمح بتخزين أرقام الفاصلة العائمة في مساحة مناسبة وإجراء العمليات الحسابية بسرعة إلى حد ما. يتم استخدام المقياس 754 في وحدات الفاصلة العائمة ومعالجات البيانات الرقمية الخاصة بكافة المعالجات الدقيقة لأجهزة الكمبيوتر المستخدمة في الوقت الحاضر تقريبًا، والتي تستخدم حساب الفاصلة العائمة ومن بين هذه الأنواع Intel وMotorola وSun وMIPS.

عند تخزين الأرقام، يمكن أن يمثل رقم ثنائي كل عدد أو عدد كسري. فعلى سبيل المثال، يمكن عرض الكسر 10/1 بنظام العدد العشري مثل 0.1. ومع ذلك، يصبح نفس العدد بتنسيقه الثنائي هو العدد العشري الثنائي المتكرر
0001100110011100110011 (وهكذا)
ويمكن تكراره إلى ما لا نهاية. لا يمكن عرض هذا العدد خلال مساحة محدودة (مقيدة). وبالتالي، يتم تقريب هذا العدد إلى الأدنى بحوالي ‎-2.8E-17 عند تخزينه.

ومع ذلك، توجد بعض القيود التي تفرضها مواصفات IEEE 754 والتي تنقسم إلى ثلاث فئات عامة:
  • الحد الأقصى/الحد الأدنى للقيود
  • الدقة
  • الأرقام الثنائية المتكررة
معلومات أخرى

الحد الأقصى/الحد الأدنى للقيود

لدى كافة أجهزة الكمبيوتر عدد أقصى وعدد أدنى يمكن معالجته. لأن عدد بت الذاكرة التي يتم تخزين العدد بها محدود، وبالتالي فإن العدد الأقصى أو العدد الأدنى الذي يمكن تخزينه يكون محدودًا أيضًا. بالنسبة لبرنامج Excel، العدد الأقصى الذي يمكن تخزينه هو 1.79769313486232E+308 والعدد الأدنى الموجب الذي يمكن تخزينه هو 2.2250738585072E-308.

الحالات التي يتم الالتزام خلالها بـ IEEE 754

  • تجاوز الحد الأدنى: يحدث تجاوز الحد الأدنى عندما يتم إنشاء عدد صغير للغاية لعرضه. في IEEE وبرنامج Excel، يكون الناتج 0 (باستثناء أن IEEE لديه مفهوم ‎-0، في حين أن برنامج Excel ليس لديه هذا المفهوم).
  • تجاوز الحد الأقصى: يحدث تجاوز الحد الأقصى عندما يكون العدد كبيرًا جدًا لعرضه. وفي هذه الحالة، يستخدم برنامج Excel طريقة العرض الخاصة به (‎#NUM!‎).

الحالات التي لا يتم الالتزام خلالها بـ IEEE 754

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

    تعتبر الأعداد التي لم تتم تسويتها بشكل أساسي حلاً بديلاً للسماح بتخزين الأعداد الأقل من الحد الأدنى الطبيعي. ولكن لا تقوم Microsoft بتنفيذ هذا الجزء الاختياري من المواصفات، لأن الأعداد التي لم تتم تسويتها بطبيعتها تتكون من عدد متغير من الخانات الرقمية الواضحة. وهو ما يسمح بحدوث خطأ واضح في العمليات الحسابية.
  • علامات ما لا نهاية موجبة/سالبة: تظهر علامات ما لا نهاية عند القسمة على 0. لا يدعم برنامج Excel علامات ما لا نهاية، بدلاً من ذلك، يظهر الخطأ ‎#DIV/0!‎ في هذه الحالات.
  • غير رقمي (NaN): يتم استخدام NaN لعرض العلميات غير الصحيحة (مثل ما لا نهاية/ما لا نهاية أو ما لا نهاية-ما لا نهاية أو الجذر التربيعي للعدد -1). تسمح NaNs لأحد البرامج بالمتابعة بعد حدوث عملية غير صحيحة. يقوم Excel بدلاً من ذلك بإنشاء خطأ مثل ‎#NUM!‎ أو ‎#DIV/0!‎.

الدقة

يتم تخزين رقم الفاصلة العائمة كثنائي في ثلاثة أجزاء داخل نطاق ٦٥ بت: العلامة والأس والجزء العشري.
بت العلامة 1أس البت 11بت ضمني 1الجزء العشري لبت 52
تقوم العلامة بتخزين علامة العدد (سالبة أو موجبة) ويقوم الأس بتخزين أس العدد 2 الذي يتم رفع العدد إليه أو خفضه (يكون الأس الأقصى/الأدنى للعدد 2 هو ‎+1,023 و‎-1,022) بينما يقوم الجزء العشري بتخزين العدد الحقيقي. تضع مساحة التخزين المحدودة للجزء العشري قيودًا على درجة القرب بين عددي فاصلة عائمة متجاورين (وهذا هو المقصود بالدقة).

يتم تخزين كل من الجزء العشري والأس كمكونات منفصلة. ومن ثم، قد يختلف مقدار الدقة الذي يمكن الوصول إليه بناءً على حجم العدد (الجزء العشري) الذي تتم معالجته. في هذه الحالة الخاصة ببرنامج Excel، بالرغم من أن برنامج Excel يتمكن من تخزين أعداد تتراوح بين 1.79769313486232E308 و2.2250738585072E-308، إلا أنه يمكنه القيام بذلك فقط خلال ١٥ رقم من الدقة. ويعد هذا التقييد نتيجة مباشرة للاتباع الصارم لمواصفات IEEE 754 وليس نتيجة تقييدًا خاصًا ببرنامج Excel. كما يوجد هذا المستوى من الدقة في برامج جداول البيانات الأخرى أيضًا.

يتم عرض أرقام الفاصلة العائمة بالنموذج التالي، حيث يكون الأس هو الأس الثنائي:
X = كسر عشري * 2^(الأس - الانحياز)
الكسر العشري هو الجزء الكسري الذي تمت تسويته للعدد، وقد تمت تسويته نتيجة تعديل الأس بحيث يكون بت البادئ دائمًا 1. وهذه الطريقة لا يلزم تخزينها، فقد يمكنك الحصول على أكثر من بت واحد للدقة. ولهذا السبب يوجد بت ضمني. وهذا ما يشبه الترقيم العلمي، حيث تقوم بمعالجة الأس للحصول على رقم واحد يسار الفاصلة العشرية، باستثناء الشكل الثنائي، يمكنك دائمًا معالجة الأس بحيث يكون البت الأول هو العدد 1، نظرًا لأنه لا يوجد سوى الآحاد والأصفار.

الانحياز هو قيمة الانحياز المستخدمة لتجنب الاضطرار إلى تخزين الأسس السالبة. يكون الانحياز الخاص بأعداد الدقة الفردية هو 127 و1023 (العدد العشري) بالنسبة لأعداد الدقة المزدوجة. يقوم برنامج Excel بتخزين الأرقام مستخدمًا الدقة المزدوجة.

مثال على استخدام أعداد كبيرة جدًا

قم بإدخال التالي في مصنف جديد:
   A1: 1.2E+200   B1: 1E+100   C1: =A1+B1
تكون القيمة الناتجة التي تظهر في الخلية C1 هي 1.2E+200 هي نفس القيمة الموجودة في الخلية A1. ففي الواقع، إذا قمت بالمقارنة بين الخليتين A1 وC1 مستخدمًا الدالة IF، على سبيل المثال، ‏IF (A1=C1)‎، سيكون الناتج TRUE. ويرجع هذا إلى مواصفات IEEE الخاصة بتخزين ١٥ رقم واضح فقط من الدقة. حتى تتمكن من تخزين العملية الحسابية أعلاه، قد يتطلب برنامج Excel على الأقل 100 رقم من الدقة.

مثال على استخدام أعداد صغيرة جدًا

قم بإدخال التالي في مصنف جديد:
   A1: 0.000123456789012345   B1: 1   C1: =A1+B1
تكون القيمة الناتجة التي تظهر في الخلية C1 هي 1.00012345678901 وليس 1.000123456789012345. ويرجع هذا إلى مواصفات IEEE الخاصة بتخزين ١٥ رقم واضح فقط من الدقة. حتى تتمكن من تخزين العملية الحسابية أعلاه، قد يتطلب برنامج Excel على الأقل 19 رقم من الدقة.

تصحيح أخطاء الدقة

يقدم برنامج Excel طريقتين أساسيتين لتعويض أخطاء التقريب. الدالة ROUND وخيار المصنف الدقة كما في العرض أو تعيين الدقة كما في العرض.

الطريقة الأولى: الدالة ROUND

يقوم المثال التالي مستخدمًا البيانات الواردة أعلاه، باستخدام الدالة ROUND بتقسيم أي عدد إلى خمسة أرقام. مما يسمح لك بالمقارنة بين الناتج وأية قيمة أخرى بنجاح.
   A1: 1.2E+200   B1: 1E+100   C1: =ROUND(A1+B1,5)‎
يكون الناتج 1.2E+200.
   D1: =IF(C1=1.2E+200, TRUE, FALSE)‎
يكون الناتج هو القيمة TRUE.

الطريقة الثانية: الدقة كما في العرض

في بعض الحالات، قد تتمكن من منع أخطاء التقريب من التأثير على العمل الذي تقوم به، وذلك باستخدام الخيار الدقة كما في العرض. يقوم هذا الخيار بتقسيم قيمة كل عدد موجود في ورقة العمل لتصبح القيمة المعروضة. لتشغيل هذا الخيار، اتبع الخطوتين التاليتين:
  1. في برنامج Excel 2003 والإصدارات السابقة من Excel، انقر فوق خيارات من القائمة أدوات.
  2. من علامة التبويب حساب، انقر لتحديد خانة الاختيار الدقة كما في العرض.
  1. في برنامج Excel 2007، انقر فوق زر Microsoft Office، ثم انقر فوق خيارات Excel، ثم انقر فوق الفئة خيارات متقدمة.
  2. في القسم عند حساب هذا المصنف، حدد المصنف الذي تريده، ثم حدد خانة الاختيار تعيين الدقة كما في العرض.
على سبيل المثال، عند اختيار تنسيق رقمي يعرض منزلتين عشريتين ثم تشغيل الخيار الدقة كما في العرض، ستفقد كافة الدقة التي تأتي بعد عددين عشريين عند حفظ المصنف. يؤثر هذا الخيار على المصنف النشط بما في ذلك كافة أوراق العمل. لا يمكن التراجع عن هذا الخيار واسترداد البيانات المفقودة. لذلك، يوصى بحفظ المصنف قبل تمكين هذا الخيار.

تكرار الأرقام الثنائية والعمليات الحسابية بالنتائج القريبة من الصفر

هناك مشكلة أخرى شائكة تتعلق بتخزين أرقام الفاصلة العائمة بشكل ثنائي، ألا وهي أن هناك بعض الأعداد المحدودة بالإضافة إلى الأعداد غير المتكررة في القاعدة العشرية 10 اللانهائية، تتكرر بشكل ثنائي. ويعد المثال الأكثر شيوعًا على هذا هو القيمة 0.1 ومتغيراتها. على الرغم من إمكانية عرض هذه الأعداد بصورة كاملة في القاعدة 10، يصبح نفس العدد الذي يتم عرضه بالتنسيق الثنائي هو الرقم الثنائي المتكرر التالي عندما يتم تخزينه في الجزء العشري:
000110011001100110011 (وهكذا)
لا تقوم مواصفات IEEE 754 بتوفير أية ميزات خاصة لأي عدد، فهي تقوم بتخزين ما يمكن تخزينه في الجزء العشري، ثم اقتطاع الباقي. وهذا يؤدي إلى حدوث خطأ عند تخزين 0.000000000000000028 أو تقريب العدد -2.8E-17.

لا يمكن حتى عرض الكسور العشرية الشائعة، مثل الكسر العشري 0.0001، بشكل ثنائي دقيق. (يعد العدد 0.0001 كسرًا ثنائيًا متكررًا بحجم ١٠٤ بت). وهذا هو نفس السبب الذي يرجع إليه عدم إمكانية عرض الكسر العشري 3/1 بالضبط في صورة عدد عشري 0.33333333333333333333 متكرر).

هذا يفسر لماذا يقوم مثال بسيط في Microsoft Visual Basic for Applications
   Sub Main()‎      MySum = 0      For I% = 1 To 10000         MySum = MySum + 0.0001      Next I%‎      Debug.Print MySum   End Sub
بطباعة 0.999999999999996 كناتج. فالخطأ البسيط الذي يظهر في عرض العدد 0.0001 بشكل ثنائي ينتقل بوضوح إلى المجموع.

مثال على إضافة رقم سالب.

  1. قم بإدخال التالي إلى مصنف جديد:
       A1: =(43.1-43.2)+1
  2. انقر بزر الماوس الأيمن فوق الخلية A1، ثم انقر فوق تنسيق الخلايا. من علامة التبويب رقم، انقر فوق علمي ضمن الفئة. قم بتعيين المنازل العشرية إلى 15.
يقوم برنامج Excel بعرض 0.899999999999999 بدلاً من 0.9. وذلك لأنه يتم حساب (43.1-43.2) أولاً، ثم تخزين -0.1 بشكل مؤقت بينما يظهر الخطأ الناتج عن تخزين -0.1 في العملية الحسابية.

مثال عند وصول إحدى القيم إلى الصفر

  1. في برنامج Excel 95 أو الإصدارات السابقة، قم بإدخال التالي إلى مصنف جديد:
       A1: =1.333+1.225-1.333-1.225
  2. انقر بزر الماوس الأيمن فوق الخلية A1، ثم انقر فوق تنسيق الخلايا. من علامة التبويب رقم، انقر فوق علمي ضمن الفئة. قم بتعيين المنازل العشرية إلى 15.
يعرض برنامج Excel 95 العدد -2.22044604925031E-16 بدلاً من 0.

يقوم برنامج Excel 97، مع ذلك، بتقديم أحد التحسينات الذي يحاول تصحيح هذه المشكلة. إذا كان من الضروري أن يكون ناتج إحدى عمليات الإضافة أو الطرح قيمة تصل إلى الصفر أو قريبة منها، سيقوم برنامج Excel 97 والإصدارات الأحدث بالتعويض عن أية أخطاء جاءت نتيجة تحويل أحد المعاملات إلى ثنائي أو العكس. يعرض المثال أعلاه عند إجرائه بطريقة صحيحة في برنامج Excel 97 أو الإصدارات الأحدث منه العدد 0 أو 0.000000000000000E+00 بالترقيم العلمي. لمزيد من المعلومات، انقر فوق رقمي المقالتين التاليتين لعرضهما في "قاعدة معارف Microsoft" (قد تحتوي هاتان المقالتان على ارتباطات إلى محتوى باللغة الإنجليزية (محتوى لم تتم ترجمته بعد)):
172911 الحصول على ناتج غير صحيح عند رفع ١٠ إلى أس كبير جدًا/صغير جدًا
214373 ‏XL2000: الحصول على ناتج غير صحيح عند رفع ١٠ إلى أس كبير جدًا/صغير جدًا
لمزيد من المعلومات حول أرقام الفاصلة العائمة ومواصفات IEEE 754، الرجاء زيارة موقعي "شبكة الإنترنت العالمية" التاليين:
مراجع
لمزيد من المعلومات حول كيفية التغلب على هذه الأخطاء، انقر فوق رقم المقالة التالي لعرضها في "قاعدة معارف Microsoft" (قد تحتوي هذه المقالة على ارتباطات إلى محتوى باللغة الإنجليزية (محتوى لم تتم ترجمته بعد)):
214118 كيفية تصحيح أخطاء التقريب في حساب الفاصلة العائمة
XL98 XL97 XL7 XL5 XL4 XL3 2.0 2.01 2.1 2.10 2.2 2.20 2.21 3.0 4.0 5.00a 5.00c math error w_works XL2007
خصائص

رقم الموضوع: 78113 - آخر مراجعة: 05/13/2010 04:11:48 - المراجعة: 7.0

Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Excel 2000 Standard Edition, Microsoft Excel 97 Standard Edition, Microsoft Excel 95 Standard Edition, Microsoft Excel 2004 for Mac, Microsoft Excel X لـ Mac, Microsoft Excel 2001 لـ Macintosh, Microsoft Excel 98 لـ Macintosh

  • kbinfo KB78113
تعليقات