سؤال

لقد كتبت هذا الرمز لإفراط في تحميل المشغل أحادي- على فئة المصفوفة:

const RegMatrix RegMatrix::operator-()const{
    RegMatrix result(numRow,numCol);
    int i,j;
    for(i=0;i<numRow;++i)
        for(j=0;j<numCol;++j){
            result.setElement(i,j,(-_matrix[i][j]));
        }

        return result;
}

عندما قمت بتشغيل برنامجي مع Debugger في Visual Studio ، أظهر لي أنه عندما تتم العملية على تساوي صفر ، فإنها تدرج مصفوفة النتيجة الرقم -0.00000. هل هي ميزة VS-Display غريبة ، أم أنها شيء يجب أن أتعامل معه بعناية؟

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

المحلول

توقيع الصفر هو الصفر مع علامة مرتبطة. في الحساب العادي ، −0 = +0 = 0. ومع ذلك ، في الحوسبة ، تسمح بعض تمثيلات الأرقام بوجود اثنين من الأصفار ، وغالبًا ما يتم الإشارة إليها بواسطة −0 (صفر سلبي) و +0 (صفر موجب). يحدث هذا في بعض تمثيلات الأرقام الموقعة للأعداد الصحيحة ، وفي معظم تمثيلات أرقام النقطة العائمة. عادةً ما يتم تشفير الرقم 0 على أنه +0 ، ولكن يمكن تمثيله إما +0 أو −0.

يتطلب معيار IEEE 754 لحساب النقطة العائمة (المستخدمة حاليًا معظم أجهزة الكمبيوتر ولغات البرمجة التي تدعم أرقام النقاط العائمة) كلا +0 و −0. يمكن اعتبار الأصفار بمثابة متغير لخط الرقم الحقيقي الممتد بحيث يكون 1/−0 = −∞ و 1/ +0 = +∞ ، التقسيم بواسطة الصفر غير محدد فقط لـ ± 0/± 0.

صفر موقّع سلبًا يردد مفهوم التحليل الرياضي للاقتراب 0 من الأسفل كحدود أحادية الجانب ، والذي قد يشار إليه بواسطة x → 0− أو x → 0− أو x → ↑ 0. يمكن استخدام التدوين "−0" بشكل غير رسمي للدلالة على عدد سالب صغير تم تقريبه إلى الصفر. يحتوي مفهوم الصفر السلبي أيضًا على بعض التطبيقات النظرية في الميكانيكا الإحصائية والتخصصات الأخرى.

يُزعم أن إدراج الصفر الموقّع في IEEE 754 يجعل من الأسهل تحقيق الدقة العددية في بعض المشكلات الحرجة ،1 على وجه الخصوص عند الحوسبة مع وظائف أولية معقدة. [2] من ناحية أخرى ، فإن مفهوم الصفر الموقّع يتعارض مع الافتراض العام الذي تم إجراؤه في معظم المجالات الرياضية (وفي معظم دورات الرياضيات) بأن الصفر السلبي هو نفس الشيء مثل الصفر. يمكن أن تكون التمثيلات التي تسمح للصفر السلبي بمثابة مصدر للأخطاء في البرامج ، حيث لا يدرك مطورو البرامج (أو قد ينسون) أنه على الرغم من أن التمثيلات الصفراء تتصرف على قدم المساواة في ظل مقارنات رقمية ، إلا أنها أنماط بت مختلفة وتنتج نتائج مختلفة في بعض عمليات.

لمزيد من المعلومات، راجع وقع الصفر صفحة ويكي.

نصائح أخرى

باستخدام مزدوج (IEEE754) ، هناك صفر إيجابي وسلبي محدد.

حسنًا بالنسبة للزوجين ، في الواقع قيم مختلفة لـ "0.0" و "-0.0" ، أعتقد أنه من المنطقي تمامًا ....

ما هي النتيجة المختلفة التي توقعتها؟

كما قال إريون ، لديك صفر سلبي:

#include <stdio.h>
int main()
{
    printf("%f\n", -0.0);
}

-0 و 0 هما نفس الشيء ، ولا شيء يدعو للقلق. أرقام النقاط العائمة لديها القدرة على الحصول على كل من إيجابية وسلبية 0 ، لأسباب الرياضيات. ولكن يتم تفسير -0 بنفس طريقة 0 في C/C ++ الحساب.

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