C/C++

Почему отрицательное число умножив на 0, почучается минус ноль. Хотя должно быть просто ноль.

Пример ошибки:
double a = 0;
double b = -4;
cout << a * b;
Так компилятор работает.
Элдияр Жуматаев
Элдияр Жуматаев
21 258
Лучший ответ
ru.wikipedia.org/wiki/−0_(программирование)
Потому что в вещественных числах есть два нуля: положительный и отрицательный.
В школе это не проходят, но на первом курсе универа - да.
В математике ещё похлеще, кстати, у нуля помимо прочего есть ещё и порядок (но в компьютерах - этого нет, там машинный ноль).
Nikolai Goruhin
Nikolai Goruhin
94 184
https://ru.wikipedia.org/wiki/Машинный_ноль
Когда пишете double a = 0, переменная a имеет значение не ровно 0, а имеет значение 0.00000000(...еще дофига нулей...) 00001, называемое машинным нулем. Значение машинного нуля в разных системах отличается в зависимости типа транслятора, типа переменных и еще кучи многих факторов. Ну например, все из той же Википедии, в языке Си машинный ноль для переменной типа double равен 2^(-52).
Ну так вот, когда умножаете машинный ноль на -4, получается -0.000000(...)000004. Очень маленькое число, почти нулевое, но все же отрицательное.
Леонид Отоцкий
Леонид Отоцкий
69 560
Ноль является целым чётным натуральным числом, поскольку при делении его на 2 получается целое число: 0/2=0.
Ноль не имеет знака. Могут использоваться условные обозначения отрицательной и положительной бесконечно малой величины: {-0}, {+0}, однако это не числа в обычном смысле.
Поэтому правильно получить ноль нужно будет так:
#include<stdio.h>
int main()
{
double a = 0; double b = -4; int c=a*b;
printf("%d",c);
return 0;
}
Денис Кондусов
Денис Кондусов
37 945
>> Хотя должно быть просто ноль.
В этом вопросе ты заблуждаешься.
Отсюда и неверные ожидания.
С хренали ?

Похожие вопросы