سؤال

غالبا ما يكون من الصعب العثور على مصدر نان ، لأنه يمكن أن يحدث في أي خطوة من حساب ونشر نفسها.لذلك هل من الممكن لجعل C++ برنامج وقف عند حساب العوائد نان أو inf ؟ الأفضل في رأيي أن يكون الحادث مع لطيفة رسالة الخطأ:

Foo: NaN encoutered at Foo.c:624

هو شيء مثل هذا ممكن ؟ هل لديك حل أفضل ؟ كيف يمكنك تصحيح نان مشاكل ؟

تحرير:توضيحات:أنا أعمل مع دول مجلس التعاون الخليجي تحت لينكس.

هل كانت مفيدة؟

المحلول

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

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

في نظام لينكس الخاص بك هذا ينبغي أن تفعل خدعة:

#include <fenv.h> 
...
feenableexcept(FE_INVALID | FE_OVERFLOW);

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

نصائح أخرى

نعم!مجموعة (ربما أكثر أو أقل portably) الخاص بك IEEE 754-متوافقة مع المعالج لإنشاء المقاطعة عندما نان أو لانهائية مصادفة.

لقد بحثت و وجدت هذه الشرائح, التي هي بداية.الشرائح في الصفحة 5 يلخص كل ما تحتاجه من معلومات.

أنا لا ج الخبراء, لكن أتوقع الجواب هو لا.

  1. هذا يتطلب من كل فرد تطفو حساب أن يكون هذا الاختيار.ضخمة تأثير الأداء.
  2. نان Inf لا الشر.قد يكون شرعيا المستخدمة في مكتبة التطبيق الخاص بك يستخدم وكسرها.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top