double a = 0;
double b = -42;
double result = a * b;
cout << result;
a * b
的結果是-0
,但我預計0
。我哪裏做錯了?爲什麼這個雙值打印爲「-0」?
double a = 0;
double b = -42;
double result = a * b;
cout << result;
a * b
的結果是-0
,但我預計0
。我哪裏做錯了?爲什麼這個雙值打印爲「-0」?
位表示-0.0
和0.0
是不同,但他們相同的值,所以-0.0==0.0
將返回true
。在你的情況下,result
是-0.0
,因爲其中一個操作數是負數。
看到這個演示:
#include <iostream>
#include <iomanip>
void print_bytes(char const *name, double d)
{
unsigned char *pd = reinterpret_cast<unsigned char*>(&d);
std::cout << name << " = " << std::setw(2) << d << " => ";
for(int i = 0 ; i < sizeof(d) ; ++i)
std::cout << std::setw(-3) << (unsigned)pd[i] << " ";
std::cout << std::endl;
}
#define print_bytes_of(a) print_bytes(#a, a)
int main()
{
double a = 0.0;
double b = -0.0;
std::cout << "Value comparison" << std::endl;
std::cout << "(a==b) => " << (a==b) <<std::endl;
std::cout << "(a!=b) => " << (a!=b) <<std::endl;
std::cout << "\nValue representation" << std::endl;
print_bytes_of(a);
print_bytes_of(b);
}
輸出([email protected]):
Value comparison
(a==b) => 1
(a!=b) => 0
Value representation
a = 0 => 0 0 0 0 0 0 0 0
b = -0 => 0 0 0 0 0 0 0 128
正如你可以看到自己的-0.0
的最後字節是從0.0
的最後字節不同。
希望有所幫助。
我相信0 == -0所以沒有問題。 -0是一個浮點問題。 – 2013-04-17 18:47:59
[有關簽名爲零的維基百科文章](http://en.wikipedia.org/wiki/Negative_zero)值得一讀。 – halex
我編輯了標題,使其更具體。 –