ما هو الحل المستحسن إذا numeric_limits <المزدوج> :: has_infinity هو زائف؟

StackOverflow https://stackoverflow.com/questions/447520

سؤال

ولست بحاجة للتحقق قيمة مزدوجة لما لا نهاية في التطبيق C ++ على لينكس. على معظم المنصات وهذا يعمل عن طريق مقارنة مع std::numeric_limits<double>::infinity(). ومع ذلك، على بعض الأنظمة الأساسية القديمة (ريدهات 9 على سبيل المثال، مع دول مجلس التعاون الخليجي 3.2.2) هذا غير متوفر، وstd::numeric_limits<double>::has_infinity هو زائف هناك.

ما الحل تنصحين لتلك البرامج؟

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

المحلول 3

وطيب، ولقد لجأت الآن إلى استخدام INFINITY وNAN وحدات الماكرو على هذا الجهاز معينة - يبدو أن تعمل بشكل جيد. انهم يأتون من math.h.

نصائح أخرى

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

infinity - infinity = NaN

والإيجابية والسلبية ما لا نهاية وNaN القيم هي القيم الوحيدة التي هذا هو الصحيح. NaNs لهي خاصة القيم "لا واحد في عدد" تستخدم للإشارة إلى أخطاء مجال الوظائف، على سبيل المثال sqrt(-1). أيضا:

NaN != NaN

وNaNs هي القيم الوحيدة التي هذا هو الصحيح.

وذلك:

bool is_infinite(double x) {
    double y = x - x;
    return x == x && y != y;
}

وسيعود صحيح إذا وفقط إذا x إما لا نهاية إيجابية أو سلبية. إضافة اختبار لx > 0 إذا كنت تريد فقط للتحقق من ما لا نهاية إيجابية.

لمعظم الحالات، الأمراض المنقولة جنسيا :: :: numeric_limits ماكس () يمكن أن يكون بديلا صالحا لمدة الأمراض المنقولة جنسيا :: :: numeric_limits ما لا نهاية ().

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top