零值上的一元运算符 - () - c ++

时间:2010-10-07 13:08:19

标签: c++ operator-overloading unary-operator

我编写了这段代码来重载矩阵类上的一元运算符:

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;
}

当我在visual studio中使用调试器运行我的程序时,它向我显示当操作在double等于零时完成时,它会将结果矩阵插入数字-0.00000。 这是一个奇怪的VS显示功能,还是我应该小心处理的事情?

5 个答案:

答案 0 :(得分:4)

  

有符号的零为零   标志。在普通算术中,-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 in   特别是在复杂的计算中   基本功能。[2]在另一   手,签名零运行的概念   与一般假设相反   在大多数数学领域(和   在大多数数学课程中)   负零与此相同   零。表示允许   负零可以是一个来源   程序中的错误,如软件   开发人员没有意识到(或可能   忘了),虽然两个零   表示在...下表现相同   数字比较,他们是   不同的位模式和产量   某些操作中的结果不同。

有关详细信息,请参阅Signed Zero wiki页。

答案 1 :(得分:2)

使用double(IEEE754),定义了正负零。

答案 2 :(得分:0)

对于双打实际上有'0.0'和'-0.0'的不同值我觉得它很有道理....

您期望得到什么不同的结果?

答案 3 :(得分:0)

正如ereOn所说,你有一个负零:

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

答案 4 :(得分:-1)

-0和0是相同的东西,没什么好担心的。出于数学原因,浮点数能够具有正0和负0。但-0的解释方式与C / C ++算术中的0相同。