Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/88: Рейтинг темы: голосов - 88, средняя оценка - 4.99
1 / 1 / 1
Регистрация: 04.05.2016
Сообщений: 266

Деление на 0

29.03.2018, 17:25. Показов 18497. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Все говорят на 0 делить нельзя,но я поделил,в чем тут подвох
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
using namespace std;
 
int main()
{
int x=1/(double)0;
cout<<x<<endl;
}
и получился результат -2147483648
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.03.2018, 17:25
Ответы с готовыми решениями:

Задача про деление яблок (целочисленное деление)
Ребят,помогите с задачкой,как написать input.txt и output.txt? Помогите решить задачу. C++. Заранее спасибо! N школьников делят K яблок...

Умножение, деление и деление с остатком
Рассмотрим эти операции на примере. static void Main() { int i = 100, j = 15; double a = 14.2, b = 3.5; ...

Деление знаковых чисел с выводом ошибки "Деление на ноль"
Собственно поставили передо мной задачу - написать прогу деления двух чисел, причем что бы учитывался знак, и помимо всего прочего при...

33
 Аватар для axela002
71 / 58 / 48
Регистрация: 12.03.2017
Сообщений: 563
29.03.2018, 17:29
Цитата Сообщение от viramir Посмотреть сообщение
и получился результат -2147483648
Обычный мусоp..
0
1 / 1 / 1
Регистрация: 04.05.2016
Сообщений: 266
29.03.2018, 17:30  [ТС]
Цитата Сообщение от axela002 Посмотреть сообщение
Обычный мусоp..
Как это мусор,это же не строка?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
29.03.2018, 17:36
Цитата Сообщение от viramir Посмотреть сообщение
в чем тут подвох
ни вчем, нормальный компилятор такое не скомпилит, обычно будет ошибка типа divide or mod by zero
в вашем случае скорее компиялтор просто проигнорил операцию
0
1 / 1 / 1
Регистрация: 04.05.2016
Сообщений: 266
29.03.2018, 17:38  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
ни вчем, нормальный компилятор такое не скомпилит, обычно будет ошибка типа divide or mod by zero
в вашем случае скорее компиялтор просто проигнорил операцию
Ошибка и была пока я не перевел ноль в double
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
29.03.2018, 17:41
VS такое не пропускает
Error 1 error C2124: divide or mod by zero
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
29.03.2018, 17:52
Аналогично, MinGw спокойно запустил и выдал то же самое число, что и у тебя
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,382
29.03.2018, 17:55
Цитата Сообщение от viramir Посмотреть сообщение
в чем тут подвох
в том, что ты поделил не на ноль
0
1 / 1 / 1
Регистрация: 04.05.2016
Сообщений: 266
29.03.2018, 17:56  [ТС]
Цитата Сообщение от vlisp Посмотреть сообщение
в том, что ты поделил не на ноль
А на что?
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
29.03.2018, 17:57
viramir,
gcc компилит.
Вообще числа с плавающей точкой делить на ноль можно, чем вы и занимаетесь приводя к double, при этом получается одна из бесконечностей + или -, она имеет свое представление в формате вещественного числа и видимо часть этого представления потом копируется в целочисленную переменную.
А вообще делением на 0 для double иногда пользуются, например, в операциях сравнения результат может участвовать.
1
1 / 1 / 1
Регистрация: 04.05.2016
Сообщений: 266
29.03.2018, 19:17  [ТС]
Цитата Сообщение от LegionK Посмотреть сообщение
Аналогично, MinGw спокойно запустил и выдал то же самое число, что и у тебя
У меня и есть Migw +CodeBlocks
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
29.03.2018, 19:19
viramir, да я так, просто добавил
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.03.2018, 20:23
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Цитата Сообщение от woldemas Посмотреть сообщение
viramir,
gcc компилит.
Вообще числа с плавающей точкой делить на ноль можно, чем вы и занимаетесь приводя к double, при этом получается одна из бесконечностей + или -, она имеет свое представление в формате вещественного числа и видимо часть этого представления потом копируется в целочисленную переменную.
А вообще делением на 0 для double иногда пользуются, например, в операциях сравнения результат может участвовать.
Немного дополню

Почему здесь возникает именно вещественное деление, а не целочисленное - можно почитать здесь: Распространенные ошибки

В итоге в результате вещественного деления мы получили значение "бесконечность". Но потом мы это значение пытаемся преобразовать в целое (поскольку "x" имеет тип int). Преобразование из вещественного в целое определено только тогда, когда значение вещественного не превышает диапазон представления целого (в нашем случае это диапазон от -2147483648 до +2147483647). Когда вещественное значение вываливается из этого диапазона (как это имеет место быть для значения "бесконечность"), то имеем undefined behavior. Конкретно в твоём случае компилятор построил код, который при исполнении выдал значение -2147483648

Для большей наглядности можно было бы посмотреть, что печатает следующий код, чтобы увидеть в чистом виде результат вещественного деления на ноль:

C++
#include <iostream>
 
using namespace std;
 
int main()
{
  // Без преобразования к int'у, которое провоцирует undefined ситуацию
  cout << 1/(double)0 << endl;
 
  // С преобразованием к int'у, которое провоцирует undefined ситуацию
  int x=1/(double)0;
  cout<<x<<endl;
}
Вот так выглядит исполнение на intel'е

Code
$ g++ t.cc
$ ./a.exe
inf
-2147483648
А вот так на sparc'е

Code
$ g++ t.cc
$ ./a.out
inf
2147483647
В одном случае преобразование из бесконечности в целое дало результат "минус дофига", а в другом - "плюс дофига". Потому что на sparc'е и на intel'е аппаратные операции преобразования из вещественного в целое выдают разные результаты. Ни один из результатов нельзя назвать правильным или неправильным, поскольку по стандарту результат не определён
2
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,382
29.03.2018, 20:23
Цитата Сообщение от viramir Посмотреть сообщение
А на что?
по читай про арифметику чисел с плавающей точкой, станет понятно почему числа с плавающей точкой не равны друг другу и не равны нулю
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.03.2018, 20:30
Цитата Сообщение от vlisp Посмотреть сообщение
числа с плавающей точкой не равны друг другу и не равны нулю


C
#include <stdio.h>
 
float f1 = 1.2345;
float f2 = 1.2345;
 
float f3 = 0.0;
 
int main (void)
{
  if (f1 == f2)
    printf ("equal\n");
  else
    printf ("not equal\n");
 
  if (f3 == 0)
    printf ("equal\n");
  else
    printf ("not equal\n");
}
Code
$ gcc t.c
$ ./a.exe
equal
equal
2
1 / 1 / 1
Регистрация: 04.05.2016
Сообщений: 266
29.03.2018, 20:32  [ТС]
Evg, меня бесит что long и long long это разное
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.03.2018, 20:35
Цитата Сообщение от viramir Посмотреть сообщение
меня бесит что long и long long это разное
Не понимаю, какое это имеет отношение к текущей теме. Но тем не менее: https://www.cyberforum.ru/blogs/18334/blog69.html

А если уж совсем хочется разобраться, то https://www.cyberforum.ru/blogs/18334/blog88.html
0
1 / 1 / 1
Регистрация: 04.05.2016
Сообщений: 266
29.03.2018, 20:36  [ТС]
Evg, а такое что какое число не ставь что длинное что длинное длинное все равно будет тот же результат
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.03.2018, 21:05
Цитата Сообщение от viramir Посмотреть сообщение
А такое что какое число не ставь что длинное что длинное длинное все равно будет тот же результат
Куда "не ставь"?

Добавлено через 44 секунды

Не по теме:

Временами просто поражаюсь отдельно взятым товарищам на форуме. Людям реально впадлу внятно задать вопрос, чтобы другие ему же помогли

0
1 / 1 / 1
Регистрация: 04.05.2016
Сообщений: 266
29.03.2018, 21:06  [ТС]
Evg,
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
using namespace std;
 
int main()
{
long long double x=1/(double)0;
cout<<x<<endl;
}
результат всегда INT
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2018, 21:06
Помогаю со студенческими работами здесь

Деление на 3
35. Деление на 3. Как известно, число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3. Проверить этот признак на...

Деление на 1
Здравствуйте! В программ есть операция которая делит числа на 1, чтобы найти частоту. Так вот, например, когда я делю 1/186 ответ выдает...

Деление
Оригинальное задание звучит так: Вот, что я наваял: //The program divides the first number by the second one. //It should...

Деление
Деление знаковых чисел, в результате почему-то 0 выскакивает( не могли бы вы найти ошибку? .model small .data input1 db...

Деление на 0
задача: Условие Имеется N человек и матрица А размера N´N. Элемент A матрицы равен 1, если человек i знаком с человеком j (если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru