4

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

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 显示功能,还是我应该小心处理的东西?

4

5 回答 5

4

带符号的零是带有关联符号的零。在普通算术中,-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] 另一方面,有符号零的概念与大多数数学领域(以及大多数数学课程)中负零与零相同的一般假设相反。允许负零的表示可能是程序中的错误来源,因为软件开发人员没有意识到(或可能忘记)虽然两个零表示在数值比较下表现相同,但它们是不同的位模式并在某些情况下产生不同的结果操作。

有关更多信息,请参阅零签名wiki 页面。

于 2010-10-07T13:14:21.427 回答
2

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

于 2010-10-07T13:13:21.147 回答
0

好吧,对于双打来说,'0.0' 和 '-0.0' 实际上有不同的值,我认为这很有意义....

你期待什么不同的结果?

于 2010-10-07T13:14:12.233 回答
0

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

#include <stdio.h>
int main()
{
    printf("%f\n", -0.0);
}
于 2010-10-07T13:14:42.660 回答
-1

-0 和 0 是一回事,不用担心。出于数学原因,浮点数具有正负 0 的能力。但是 -0 的解释方式与 C/C++ 算术中的 0 相同。

于 2010-10-07T13:14:48.563 回答