Сортировка между подписанными и неподписанными нулями Переполнение стека

Я должен быть в состоянии сортировать отрицательные нули и нули для задания, которое я делаю в университете, используя c ++, может кто-нибудь сказать мне, почему следующий код дает отрицательный ноль? Я застрял, и я не уверен, почему это работает …

        cout << "Enter the number of elements you want to add to the vector:\n";
cin >> x;
cout << "Enter the integers: \n" << endl;
for (int i = 0; i < x; i++)
{
cin >> y;
y = y - 0.0;
cout << y;

Array.push_back(y);
}

Если есть лучший способ получения отрицательного нуля при сортировке указанного вектора, пожалуйста, сообщите об этом.
Большое спасибо!

-3

Решение

Прежде всего, в стандарте C ++ не должно быть никаких отрицательных нулей, поэтому я предполагаю, что вы говорите об отрицательном нуле из IEEE-754, на котором большинство (я никогда не сталкивался с исключением) реализаций C ++ основывают свою математику с плавающей точкой.

В этом случае выражение

y = y - 0.0;

даст -0.0 только если y == -0.0 до это назначение или если вы установите режим округления до «Вокруг -INFINITY», что вы обычно не будете.

На самом деле произвести double со значением -0.0Вы можете просто назначить желаемое значение:

double d = -0.0;

Сейчас d == -0.0 в IEEE математика с плавающей точкой.

Тем не менее, как

Сравнения должны игнорировать знак нуля

(IEEE 754-1985, 5.7. Сравнение), -0.0 < 0.0 даст false, так что если вы действительно хотите отсортировать отрицательный ноль до положительного нуля, вам нужно написать свой собственный компаратор, возможно, используя std::signbit,


Приложение: Соответствующая стандартная цитата:

Когда сумма двух операндов с противоположными знаками (или разница двух
операнды с одинаковыми знаками) — ровно ноль, знак этой суммы (или разницы)
должен быть + во всех режимах округления, кроме округления до –INFINITY, в котором
режим, которым подписывается знак -.

IEEE 754-1985, 6,3 (бит знака)

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]