Почему 0 делится на 0 ошибка? - PullRequest
20 голосов
/ 13 июля 2010

Я столкнулся с этой проблемой в вычислениях, которые я делаю в своем коде, где делитель равен 0, если делитель тоже равен 0. В моем коде я возвращаю 0 для этого случая. Мне интересно, хотя деление на ноль обычно не определено, почему бы не сделать исключение для этого случая? Мое понимание того, почему деление на ноль не определено, заключается в том, что его нельзя изменить. Однако я не вижу этой проблемы в случае 0 / 0.

РЕДАКТИРОВАТЬ ОК, поэтому этот вопрос вызвал много дискуссий. Я допустил ошибку, приняв ответ слишком охотно, потому что получил много голосов. Теперь я принял ответ AakashM , потому что он дает представление о том, как анализировать проблему.

Ответы [ 18 ]

77 голосов
/ 13 июля 2010

Скажем:

0/0 = x

Теперь перестановка уравнения (умножение обеих сторон на 0) дает:

x * 0 = 0

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

58 голосов
/ 13 июля 2010

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

  • В некотором смысле оправданно присваивать 'значение' положительной бесконечности some-strictly-positive-quantity / 0, поскольку предел четко определен

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

19 голосов
/ 14 июля 2010

(Вдохновленный довольно хорошим ответом Тони Бреяля на пост моего одного)

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

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

 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

5 голосов
/ 13 июля 2010

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

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 голосов
/ 13 июля 2010

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

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

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

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

3 голосов
/ 13 июля 2010

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

2 голосов
/ 10 марта 2011

Возможно, вы захотите взглянуть на Доктор. Работа Джеймса Андерсона по Трансарифметике. Это не принято.

Трансарифметика вводит термин / число 'Nullity', чтобы принять значение 0/0, которое Джеймс сравнивает с введением 'i' и 'j'.

2 голосов
/ 13 июля 2010

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

1 голос
/ 13 июля 2010

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

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

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

1 голос
/ 13 июля 2010

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

...