الانتقال إلى المحتوى الرئيسي

استبعاد النقطة العائمة من ج في لغة البرمجة ج-المشاكل والحلول

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

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

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

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

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

  1. المشاكل الرئيسية مع النقطة العائمة في لغة البرمجة ج
  2. تقريب أرقام الفاصلة العائمة
  3. تمثيل القيم اللانهائية وغير الرقمية
  4. فقدان الدقة في عمليات النقطة العائمة
  5. سلوك غير متوقع عند مقارنة أرقام الفاصلة العائمة
  6. مشاكل مقارنة أرقام الفاصلة العائمة مع الصفر
  7. أخطاء التقريب عند تحويل الأرقام إلى سلسلة
  8. فقدان الدقة أثناء التسلسل وإلغاء تسلسل أرقام الفاصلة العائمة
  9. القيود عند استخدام النقطة العائمة في الخوارزميات

المشاكل الرئيسية مع النقطة العائمة في لغة البرمجة ج

1. فقدان الدقة:

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

2. خطأ التقريب:

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

3. مشاكل المقارنة:

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

4. مشاكل الإدخال / الإخراج:

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

5. الاعتماد على الأجهزة والتنفيذ:

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

6. دقة غير كافية لبعض الحسابات:

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

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

تقريب أرقام الفاصلة العائمة

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

في ال لغة البرمجة ج ، هناك عدة وظائف لتقريب أرقام الفاصلة العائمة:

  • جولة () - تقريب رقم إلى أقرب عدد صحيح.
  • السقف () - تقريب الرقم إلى أقرب عدد صحيح أكبر.
  • أرضية () - تقريب الرقم لأسفل إلى أقرب عدد صحيح أصغر.
  • ترونك–) - يتجاهل الجزء العشري من رقم ، ويحوله إلى عدد صحيح.
  • رينت–) - تقريب الرقم إلى أقرب عدد صحيح مع الحفاظ على التكافؤ.

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

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

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

تمثيل القيم اللانهائية وغير الرقمية

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

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

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

للتحقق من المساواة أو عدم المساواة في هذه القيم الخاصة ، هناك وظائف في لغة ج: إيسنف () للتحقق من اللانهاية و إيسنان () للتحقق من وجود قيمة غير رقمية. ترجع هذه الدوال قيمة غير صفرية إذا كانت القيمة التي يتم التحقق منها لانهائية أو غير رقم ، على التوالي.

فيما يلي أمثلة على استخدام هذه الوظائف:

# تشمل

# تشمل

كثافة العمليات الرئيسية () {

مزدوج أ = 1.0/ 0.0 ؛ / / اللانهاية

مزدوج ب = 0.0/ 0.0 ؛ / / قيمة غير رقمية

إذا (إيسنف (أ)) {

برينتف ("أ هو اللانهاية

");

}

إذا (إسنان (ب)) {

برينتف ("ب هي قيمة غير رقمية

");

}

العودة 0;

}

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

فقدان الدقة في عمليات النقطة العائمة

في برمجة الفاصلة العائمة ، يمكن أن يؤدي استخدام أرقام الفاصلة العائمة إلى فقدان الدقة عند إجراء العمليات.

ويرجع ذلك إلى القيود المفروضة على تمثيل أرقام الفاصلة العائمة في ذاكرة الكمبيوتر وخصائص تمثيلها في إيي 754 شكل.

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

هذا ملحوظ بشكل خاص عند إجراء عمليات بأرقام لها أوامر مختلفة بشكل كبير.

أيضا ، قد تحدث مشاكل مع فقدان الدقة عند مقارنة أرقام الفاصلة العائمة.

نظرا لتقريب وعدم دقة تمثيل أرقام الفاصلة العائمة ، فإن مقارنتها لن تعطي دائما النتيجة المتوقعة.

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

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

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

مشاكل مقارنة أرقام الفاصلة العائمة مع الصفر

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

النظر في مثال:

مزدوج أ = 0.1 + 0.1 + 0.1 ;

} آخر {

// يتم تنفيذ الكود إذا كان أ لا يساوي ب

}

يجب أن تكون النتيجة المتوقعة هي تنفيذ الكود في الكتلة الأخرى ، لأننا نعلم في أذهاننا ذلك 0.1 + 0.1 + 0.1 لا يساوي 0.3. ومع ذلك ، بسبب أخطاء التقريب عند تمثيل أرقام الفاصلة العائمة في شكل ثنائي ، قد تعطي هذه المقارنة نتيجة غير متوقعة.

  1. لتجنب مثل هذه المشاكل ، يوصى باستخدام دلتا — بعض القيمة الصغيرة ، مقارنة الأرقام مع الصفر. على سبيل المثال:
  2. مزدوج أ = 0.1 + 0.1 + 0.1 ;

  3. ضعف ب = 0.3;
  4. دلتا مزدوجة = 0.000001; // ضبط الدلتا

  5. إذا (فابس (أ-ب) < دلتا) {
  6. // الكود الذي سيتم تنفيذه إذا أ يساوي تقريبا ب

  7. } آخر {
  8. // الكود الذي سيتم تنفيذه إذا أ لا يساوي تقريبا ب

}

في هذه الحالة ، نقارن الفرق بين الأرقام مع دلتا (0.000001) مع صفر. إذا كان الفرق أقل من دلتا ، فإننا نعتبر الأرقام متساوية تقريبا.

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

على سبيل المثال:

مزدوج أ = 0.1 + 0.1 + 0.1 ;

ضعف ب = 0.3;

إبسيلون مزدوج = 0.000001 ؛ / / معدل بت التطبيع

إذا (فابس (أ-ب) < إبسيلون * فابس (أ)) {

// الكود الذي سيتم تنفيذه إذا أ يساوي تقريبا ب

} آخر {

// الكود الذي سيتم تنفيذه إذا أ لا يساوي تقريبا ب

}

في هذه الحالة ، نقارن الفرق بين الأرقام مع منتج الدلتا (0.000001) وأهمية الرقم أ (فابس(أ)). إذا كان الفرق أقل من المنتج ، فإننا نعتبر الأرقام متساوية تقريبا.

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

أخطاء التقريب عند تحويل الأرقام إلى سلسلة