Подтвердить что ты не робот

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

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

EDIT Хорошо, поэтому этот вопрос породил много дискуссий. Я совершил ошибку, слишком жадно приняв ответ, исходя из того, что он получил много голосов. Теперь я принял ответ AakashM, потому что он дает представление о том, как анализировать проблему.

4b9b3361

Ответ 1

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

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

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

Ответ 2

Скажем:

0/0 = x

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

x * 0 = 0

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

Ответ 3

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

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

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

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

Вы попадаете в сложные области, когда пытаетесь делить на нуль. Неверно, что число, деленное на 0, всегда undefined. Это зависит от проблемы. Я приведу вам пример из исчисления, где определено число 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

Но я могу использовать еще одну теорему, называемую l'Hopital rule, которая говорит мне, что этот предел также равен 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

Ответ 4

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

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

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

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

Ответ 5

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

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 результатом является бесконечность, которая является неустойчивой или нефиксированной точкой. Вы не можете записать бесконечность вниз как число, потому что это не так, это понятие постоянно растущего числа.

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

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

НО

    log(0) = -infinity

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

Сказав все это, если вы заинтересованы в том, как превратить неопределенную форму в определенную форму, посмотрите правило l'Hopital, которое эффективно говорит:

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

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

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

Тони Брейал

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

Ответ 6

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

Ответ 7

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

Ответ 8

Вы можете посмотреть Dr. Джеймс Андерсон работает над Transarithmetic. Это не принято.

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

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

И 4/0 - undefined.

Ответ 12

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

Ответ 13

Это только логический ответ, а не математический, представьте Zero как пустое, как вы можете разделить пустое на пустое, это имеет место и в делении на ноль, и как вы можете делить что-то пустое.

Ответ 14

0 ничего не значит, поэтому, если у вас ничего нет, это не означает, что что-либо распространяется на что-либо. Некоторые транзитные объекты, когда перечисляют количество поездок определенной линии, номер поездки 0 обычно является специальным маршрутом, который маршрутизируется по-другому. Как правило, хорошим примером может служить Транзитные системы Torrance, в которых линия 2 имеет отключение до первой поездки, известную как номер поездки 0, которая работает только по будним дням, эта поездка, в частности, является номером поездки 0, потому что это специализированный маршрут, который маршрутизируется в отличие от всех других маршрутов.

Подробнее см. на следующих веб-страницах: http://transit.torrnet.com/PDF/Line-2_MAP.pdf http://transit.torrnet.com/PDF/Line-2_Time_PDF.pdf

На карте номер поездки 0 - это отключение, которое отображается в пунктирной линии, сплошная линия отображает регулярную маршрутизацию.

Иногда 0 можно использовать для нумерации поездок, когда маршрут считается маршрутом "Экспресс-сервис".

Ответ 15

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

Потому что:

  • как говорили другие, это не так просто;)
  • нет приложения для определения исключения 0/0 - добавление осложняет математику без каких-либо выигрышей.

Ответ 16

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

function div(a, b) {
    if(b === 0 && a !== 0) {
        return undefined;
    }
    if(b === 0 && a === 0) {
        return Math.random;
    }
    return a/b;
}

Ответ 17

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

Ответ 18

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

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