我编写了这段代码来重载矩阵类上的一元运算符:
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显示功能,还是我应该小心处理的事情?
答案 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相同。