Почему 0 делится на 0 ошибка?

На самом деле лучше всего использовать try / catch. Зачем? Потому что вы можете контролировать место, где вы ожидаете исключения.

Рассмотрим этот пример:

@Test (expected = RuntimeException.class)
public void someTest() {
   // test preparation
   // actual test
}

Что делать, если в один прекрасный день код будет изменен, а подготовка теста вызовет исключение RuntimeException? В этом случае фактический тест даже не проверяется, и даже если он не выдаст никакого исключения, тест пройдет.

Вот почему гораздо лучше использовать try / catch, чем полагаться на аннотацию.

20
задан Community 23 May 2017 в 10:27
поделиться

14 ответов

Это скорее математика, чем программирование, но кратко:

  • В некотором смысле оправданно присвоить некоторому строго положительному количеству / 0 "значение" положительной бесконечности, потому что предел хорошо определен

  • Однако, предел x / y при стремлении x и y к нулю зависит от пути, который они проходят. Например, lim (x -> 0) 2x / x явно равен 2, тогда как lim (x -> 0) x / 5x явно равен 1/5. Математическое определение предела требует, чтобы он был одним и тем же, каким бы путем ни следовали к пределу.

58
ответ дан 17 October 2019 в 02:38
поделиться

Если a/b = c, то a = b * c. В случае a=0 и b=0, c может быть чем угодно, потому что 0 * c = 0 будет верно для всех возможных значений c. Поэтому 0/0 не определено.

0
ответ дан 17 October 2019 в 02:38
поделиться

Посмотрите на деление в обратном порядке: если a / b = c, то c * b = a. Теперь, если вы подставите a = b = 0, вы получите c * 0 = 0. Но ВСЕ, умноженное на ноль, равно нулю, поэтому результат может быть любым. Вы хотите, чтобы 0/0 было равно 0, а кому-то еще может понравиться 1 (например, предельное значение sin (x) / x равно 1, когда x приближается к 0). Поэтому лучшее решение - оставить его неопределенным и сообщить об ошибке.

3
ответ дан 17 October 2019 в 02:38
поделиться

Структура современной математики задана математиками, которые мыслят в терминах аксиом. Наличие дополнительных аксиом, которые не являются продуктивными и не позволяют делать больше вещей, противоречит идеалу ясной математики.

2
ответ дан 17 October 2019 в 02:38
поделиться

Другое объяснение того, почему 0/0 не определено, можно написать так:

0/0 = (4 - 4)/0 = 4/0 - 4/0

И 4/0 не определено.

1
ответ дан 17 October 2019 в 02:38
поделиться

Скажем:

0/0 = x

Теперь переформулируя уравнение (умножая обе части на 0), получаем:

x * 0 = 0

Теперь вы понимаете проблему? Для x существует бесконечное количество значений, так как все, что умножено на 0, равно 0.

77
ответ дан 17 October 2019 в 02:38
поделиться

Проблема со знаменателем. Числитель фактически не имеет значения.

10 / n
10 / 1 = 10
10 / 0.1 = 100
10 / 0.001 = 1,000
10 / 0.0001 = 10,000
Therefore: 10 / 0 = infinity (in the limit as n reaches 0)

Закономерность заключается в том, что чем меньше n, тем больше результаты. При n = 0 результатом будет бесконечность, которая является нестабильной или нефиксированной точкой. Вы не можете записать бесконечность числом, потому что это не , это концепция постоянно увеличивающегося числа.

В противном случае вы могли бы подумать об этом математически, используя законы логарифмов и, таким образом, исключить деление из уравнения в целом:

    log(0/0) = log(0) - log(0)

НО

    log(0) = -infinity

Опять же, проблема в том, что результат не определен, потому что это концепция, а не числовое число, которое вы можете ввести.

Сказав все это, если вас интересует, как превратить неопределенную форму в определенную форму, найдите правило Л'Опиталя, которое фактически гласит:

f(x) / g(x) = f'(x) / g'(x)

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

Надеюсь, что это немного поможет,

Тони Брейал

P.S. использование правил журналов часто является хорошим вычислительным способом обойти проблемы выполнения операций, которые приводят к таким бесконечно малым числам, что, учитывая точность машинных значений с плавающей запятой, они неотличимы от нуля. Примером практического программирования является «максимальная вероятность», для которой обычно используются журналы, чтобы решения оставались стабильными

5
ответ дан 17 October 2019 в 02:38
поделиться

Как сказал Анджей Дойл:

Все, что погружается в ноль, является бесконечностью. 0/0 также является бесконечностью. Вы не можете получить 0/0 = 1. Это основной принцип математики. Так крутится весь мир. Но вы, конечно, можете отредактировать программу, чтобы она говорила "0/0 невозможно" или "Невозможно разделить на ноль", как говорят в мобильных телефонах.

-7
ответ дан 17 October 2019 в 02:38
поделиться

почему бы не сделать исключение для этого случая?

Потому что:

  • как сказали другие, это не так просто;)
  • нет никакого приложения для определения 0/0 - добавление исключения усложнило бы математику без пользы.
-1
ответ дан 17 October 2019 в 02:38
поделиться

Поскольку x / y = z должен быть эквивалентен x = yz , и любой z будет удовлетворять 0 = 0z , насколько полезным может быть такое «исключение»?

1
ответ дан 17 October 2019 в 02:38
поделиться

Вот полное объяснение:

http://en.wikipedia.org/wiki/Division_by_zero

(включая доказательство того, что 1 = 2 :-))

Вы Обычно в программировании это делается с помощью оператора if, чтобы получить желаемое поведение для вашего приложения.

5
ответ дан 17 October 2019 в 02:38
поделиться

(Был вдохновлен довольно хорошим ответом Тони Бреяла, чтобы опубликовать свой собственный)

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

Ноль, деленный на любое число (кроме самого нуля), равен нулю. Выражаясь более математически:

 0/n = 0      for all non-zero numbers n.

Вы попадаете в хитрые сферы, когда пытаетесь делить на сам ноль. Неверно, что число, деленное на 0, всегда неопределено. Это зависит от задачи. Я приведу пример из математики, где число 0/0 определено.

Допустим, у нас есть две функции, f(x) и g(x). Если взять их коэффициент, f(x)/g(x), то получится другая функция. Назовем ее h(x).

Можно также взять пределы функций. Например, предел функции f(x) при увеличении x до 2 - это значение, к которому приближается функция при увеличении x до 2. Мы запишем этот предел так:

 lim{x->2} f(x) 

Это довольно интуитивное понятие. Просто нарисуйте график вашей функции и проведите по нему карандашом. По мере приближения значений x к 2 посмотрите, куда движется функция.

Теперь к нашему примеру. Пусть:

 f(x) = 2x - 2
 g(x) = x - 1

и рассмотрим их коэффициент:

 h(x) = f(x)/g(x)

Что если нам нужен lim{x->1} h(x)? Есть теоремы, которые говорят, что

 lim{x->1} h(x) = lim{x->1} f(x) / g(x) 
                = (lim{x->1} f(x)) / (lim{x->1} g(x))  
                = (lim{x->1} 2x-2) / (lim{x->1} x-1)
                =~ [2*(1) - 2] / [(1) - 1]  # informally speaking...
                = 0 / 0 
                  (!!!)

Итак, мы имеем:

 lim{x->1} h(x) = 0/0

Но я могу воспользоваться другой теоремой, называемой правилом л'Хопиталя, которая говорит мне, что этот предел также равен 2. Так что в этом случае 0/0 = 2 (разве я не говорил вам, что это странный зверь?)

Вот еще одна странность с 0. Допустим, что 0/0 следует старому алгебраическому правилу, согласно которому все, что делится на себя, равно 1. Тогда можно провести следующее доказательство:

Нам дано, что:

 0/0 = 1

Теперь умножьте обе стороны на любое число n.

 n * (0/0) = n * 1

Упростите обе стороны:

 (n*0)/0 = n 
 (0/0) = n 

Снова используйте предположение, что 0/0 = 1:

 1 = n 

Итак, мы только что доказали, что все остальные числа n равны 1! Значит, 0/0 не может быть равно 1.

возвращается к себе домой на mathoverflow.com

19
ответ дан 17 October 2019 в 02:38
поделиться

Сколько раз 0 переходит в 0? 5. Да - 5 * 0 = 0, 11. Да - 11 * 0 = 0, 43. Да - 43 * 0 = 0. Возможно, теперь вы понимаете, почему он не определен? :)

1
ответ дан 17 October 2019 в 02:38
поделиться

Вот что я бы сделал:

function div(a, b) {
    if(b === 0 && a !== 0) {
        return undefined;
    }
    if(b === 0 && a === 0) {
        return Math.random;
    }
    return a/b;
}
-1
ответ дан 17 October 2019 в 02:38
поделиться
Другие вопросы по тегам:

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