кут печатает "-0" вместо "0" - PullRequest
       27

кут печатает "-0" вместо "0"

4 голосов
/ 16 сентября 2008
#include <iostream>
using namespace std;

int main()
{
    double u = 0;
    double w = -u;
    cout << w << endl;
    return 0;
}

Почему этот великий кусок кода выводит -0, а не 0, как можно было бы ожидать?

Ответы [ 7 ]

13 голосов
/ 16 сентября 2008

Стандарт IEEE 754 для чисел с плавающей запятой имеет бит знака, отличный от мантиссы, что позволяет нулю быть отрицательным. Википедия должна помочь объяснить это.

2 голосов
/ 16 сентября 2008

Стандарт IEEE 754 для арифметики с плавающей запятой делает различие между +0 и -0, это может использоваться при работе с очень маленькими числами, округленными до нуля, где знак все еще имеет значение.

2 голосов
/ 16 сентября 2008

В IEEE с плавающей точкой 0 и -0 являются разными значениями, начиная с здесь в разделе «Специальные значения»:

Обратите внимание, что -0 и +0 различны значения, хотя они оба сравниваются как равны.

1 голос
/ 16 сентября 2008

Потому что ваши ожидания неверны.

IEEE требует, чтобы положительный и отрицательный ноль были представлены отдельно.

Это то, что вы видите здесь.

1 голос
/ 16 сентября 2008

Потому что double может действительно иметь значения -0, +0, -infinity, + infinity и NaN, что может быть результатом различных интересных выражений, таких как 0 / 0.

Смотрите здесь для получения дополнительной информации.

1 голос
/ 16 сентября 2008

Посмотрите на эту статью: http://en.wikipedia.org/wiki/Floating_point. Обратите внимание, что есть знаковый бит, даже если значение равно нулю.

1 голос
/ 16 сентября 2008

Потому что «отрицательный ноль» является действительным числом!

http://en.wikipedia.org/wiki/%E2%88%920_(number)

...