Задать вопрос
1HAWK1
@1HAWK1

Как поделить на о в С++?

Как поделить на о в С++?
По правилам математики на 0 делить нельзя, но теоретически и практически это возможно.
При делении на 0 я получаю 0 - это не верно. Я читал что при делении на ноль будет число близкое к 0, но не 0. Должно выйти что-то такое: 0.0000000000...00187235
Как это осуществить в С++?
  • Вопрос задан
  • 987 просмотров
Подписаться 1 Простой 9 комментариев
Решения вопроса 2
@Mercury13
Программист на «си с крестами» и не только
Деление на целочисленный 0 невозможно, происходит авария «деление на 0».

В процессорах, которые делят 2w:w → w, эта авария происходит и в других случаях. Скажем, если слово — это две десятичных цифры, то 1000:2 даст ошибку: 500 не укладывается в эти две цифры. В Си++, который умеет делить только w/w, такое сделать можно только на ассемблере.

Деление конечного на дробный 0.0 даёт ±∞ — особое «число», которое больше/меньше любого конечного.
Деление 0.0/0.0 даёт NaN (not a number, не-число).

Откуда вы взяли мантиссу 1,87235 — я не знаю. Минимальное денормализованное число в float 1.4e−45, в double 4.9e−324. Почему так мало знаков — да потому что погрешность у таких чисел ±100%: меньше только 0, а следующее вдвое больше.

UPD. В редко используемом и очень медленном extended (= long double) есть что-то похожее — 1.9e−4951.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Если вы делите целые числа (short, int, long), то на компьютере вы в принципе не можете получить число с плавающей точкой в результате, т.к. выполняете целочисленное деление.
Кроме того в процессоре целочисленное деление на ноль обычно вызывает аппаратное исключение. Оно может передаваться в приложение, может не передаваться, тут уже особенности платформы, runtime и т.п. Можете поэкспериментировать.

Деление на ноль чисел с плавающей точкой стандартно дает в результате NaN - это не число (Not a Number). Любые дальнейшие операции с NaN будут давать в результате NaN.
Современная стандартная библиотека позволяет настроить поведение так, что бы при делении на ноль чисел с плавающей точкой так же выбрасывалось исключение (std::fesetexceptflag()).

Если вы хотите получить какое-то число близкое к нулю - реализуйте деление так как считаете нужным.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Turbinex
@Turbinex
Оператор станков с ЧПУ
Деление на ноль на компьютере и любом электронном устройстве невозможно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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