Пример ошибки:
double a = 0;
double b = -4;
cout << a * b;
C/C++
Почему отрицательное число умножив на 0, почучается минус ноль. Хотя должно быть просто ноль.
Так компилятор работает.
ru.wikipedia.org/wiki/−0_(программирование)
Потому что в вещественных числах есть два нуля: положительный и отрицательный.
В школе это не проходят, но на первом курсе универа - да.
В математике ещё похлеще, кстати, у нуля помимо прочего есть ещё и порядок (но в компьютерах - этого нет, там машинный ноль).
В школе это не проходят, но на первом курсе универа - да.
В математике ещё похлеще, кстати, у нуля помимо прочего есть ещё и порядок (но в компьютерах - этого нет, там машинный ноль).
https://ru.wikipedia.org/wiki/Машинный_ноль
Когда пишете double a = 0, переменная a имеет значение не ровно 0, а имеет значение 0.00000000(...еще дофига нулей...) 00001, называемое машинным нулем. Значение машинного нуля в разных системах отличается в зависимости типа транслятора, типа переменных и еще кучи многих факторов. Ну например, все из той же Википедии, в языке Си машинный ноль для переменной типа double равен 2^(-52).
Ну так вот, когда умножаете машинный ноль на -4, получается -0.000000(...)000004. Очень маленькое число, почти нулевое, но все же отрицательное.
Когда пишете double a = 0, переменная a имеет значение не ровно 0, а имеет значение 0.00000000(...еще дофига нулей...) 00001, называемое машинным нулем. Значение машинного нуля в разных системах отличается в зависимости типа транслятора, типа переменных и еще кучи многих факторов. Ну например, все из той же Википедии, в языке Си машинный ноль для переменной типа double равен 2^(-52).
Ну так вот, когда умножаете машинный ноль на -4, получается -0.000000(...)000004. Очень маленькое число, почти нулевое, но все же отрицательное.
Ноль является целым чётным натуральным числом, поскольку при делении его на 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;
}
Ноль не имеет знака. Могут использоваться условные обозначения отрицательной и положительной бесконечно малой величины: {-0}, {+0}, однако это не числа в обычном смысле.
Поэтому правильно получить ноль нужно будет так:
#include<stdio.h>
int main()
{
double a = 0; double b = -4; int c=a*b;
printf("%d",c);
return 0;
}
>> Хотя должно быть просто ноль.
В этом вопросе ты заблуждаешься.
Отсюда и неверные ожидания.
В этом вопросе ты заблуждаешься.
Отсюда и неверные ожидания.
С хренали ?
Похожие вопросы
- Как работает математика в C++ Почему (32-6)/100*20 = 0
- Код должен находить наименьшее число в массиве, но это всегда почему то 0. Где ошибка?
- Сколько раз нужно взять остаток от деления числа на кол-во единиц в его двоичном представлении, чтобы получить 0
- Код работает некорректно. Язык Си. Нахождение максимального отрицательного элемента матрицы и замена его числом.
- С++ Максимум трёх чисел Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число
- Дано не менее 3-х различных натуральных чисел, за которыми следует 0. Определить 3 наибольших числа в последовательности
- Для чего в логических операциях применяют дополнительный ~0 логический ноль?
- Вывести на экран набор чисел в виде таблицы. Между столбиками по два пробела. Столбики должны быть выровнены.
- почему надо задавать числам инты и флоты, а не стринги?
- Помогите пожалуйста с Массивами .В языке С .Заполнил 2-мерный массив N и M случайными числами дальше не понимаю.