Комментарии 59
elseif type(value) == "number" then
if (value > 0) and (value < 0) and (value == 0) then -- indeterminate form
return "0/0"
elseif value == 1/0 then -- infinity
return "1/0"
elseif value == -1/0 then -- negative infinity
return "-1/0"
else
return tostring(value)
end
К моему счастью, тема «деления на ноль» раскрыта по максимуму. Сейчас мне добавить уже нечего. Так что это финал.
про «арифметики и с чем их едят»Вполне можно раскрыть эту тему «для чайников».
Тут же весь вопрос в том, что мы зачастую и понятия не имеем, насколько наука ушла за границы привычных понятий и оперирует «запретными» вещами. Тут как с нулем — ну нельзя делить и нельзя, потому что нарушается базовая аксиоматика. Так и остальные вопросы (типа нестандартного анализа и проч.) — мы просто не догадываемся, что там, «за пределами» тоже есть «жизнь». Потому и вопросы не возникают — мы вообще не в курсе про существование этой области знаний. Конечно, для людей со специальным образованием это всё может показаться наивным, но прикоснуться к другим граням математики — это очень и очень интересно, хотя бы для расширения кругозора.
PS В комментарии выше я имел ввиду больше не собственно про деление на ноль, а как раз раскрытие смежных тем.
Исходя из написанного, каков результат деления пяти на ноль?
// Если
0===-0
true
// то результаты
1/-0
-Infinity
// и
1/0
Infinity
// должны быть одинаковыми. Разве не так?
В этом случае всё ломает, но чёткого ответа почему так происходит я не нашёл. Может плохо прочитал статью…
Скорее всего принято для чтобы не засорять код проверками на оба нуля, но это лишь мое предположение.
Поэтому к знаковым нулям все же стоит относиться не как к фундаментальной части арифметики, а лишь как к особенности, подозрительно похожей на баг (собственно, знаковый ноль — это и есть баг формата чисел с плавающей запятой, с которым все давно смирились).
Аналогично и с бесконечностями — после любой арифметической операции над знаменателем полученную в результате вычислений бесконечность уже не следует считать знаковой, ее знак — это просто мусор.
Почему же они не равны? Потому что бесконечность, полученная в результате вычислений — не очень частый гость. Чаще всего бесконечности следует вообще рассматривать как еще один вариант NaN, фильтруя все скопом функцией isFinite.
Но, вместе с тем, знаковая бесконечность — дико удобное значение для граничных элементов при сравнениях!
Я считаю, истинные порождающие операции этих чисел — не деление, а нахождение максимума и минимума:
console.log(Math.max(), Math.min()); // -Infinity, Infinity
console.log(Math.round(-0.5)) // -0
console.log(-5 * 0) // -0
Нет, понятно, что в js будет положительный, какой он должен быть «на самом деле»? И в чем вообще смысл знака у этого нуля?
Да, можно исхитриться, и определить какую-нибудь расширенную арифметику, где знаки у нуля в подобных ситуациях будут определены. В таком случае часть правил, прописанных в IEEE 754, окажется «в тему». Но я еще не сталкивался с задачами, где бы это пригодилось — ни разу.
Верхняя картинка — из 5-минутной короткометражки «Черная дыра». Интересная зарисовка.
Для начала, сама проблема с делением на 0 по сути является выдуманной. Точнее она проблема примерно из того же класса, почему уравнение x = SQRT(-1) тоже не разрешимо в рамках школьного курса математики. Или вычитание из меньшего большее в начальной школе.
Капитан Очевидность утверждает, чтобы поделить на ноль нужно знать что такое деление и что такое ноль.
Но до этого Кэп должен заинтересоваться, вообще говоря, а что такое число вообще? Что это такое?
Один из лейтмотивов статьи — это трепанация арифметических операций в основном для привычных нам числел, таких как натуральные, целые, рациональные и т.п. с привлечением вкраплений из АТЧ.
Замечательный вывод из рассуждений:
Поле, венец универсальности, “за уши” притянуто к элементарной арифметике.
Мягко говоря, ставит все с ног на голову.
Привычные, нам числа и операции в элементарной математике, с т.з. алгебры и теории чисел — это лишь одна из простых моделей элементов абстрактной алгебры. Группы, кольца, поля, тела — имеют под собой стройное аксиоматическое основание, которое разрешает все вышеприведенные вопросы(которые, вообще говоря, там просто не возникают) и с точки зрения понимания сути вещей и с т.з. философии.
Привычные нам числа и операции очень вторичны по отношению к объектам абстрактной алгебры, которые непротиворечиво описывают куда более широкий класс объектов реального мира на самых разных его масштабах.
«Мы не можем делить на ноль, потому что забыли что однажды смешали» все свои понятия или просто нам не хватает знаний об устройстве нашего мира.
Да, в статье рассматривается частный случай, когда общая алгебра оперирует числами. Если бы «у нас» вопросы не возникали по этому поводу «почему делить нельзя», то этой статьи бы не было. Суть, описана в пункте «2.1 Зачем вообще напрягаться?»
В общем мы тут о арифметике и делении на ноль, а не об общей алгебре.
saaivs, может Вы дадите определение числа, которое покроет все случаи? ;) Мне не удалось
Относительно определения числа — все достаточно просто с позиций АТЧ.
«число» — в общем случае, это элемент множества(носителя) для заданной алгебраической системы. Выбирая подходящую сигнатуру алгебры мы получаем всю нашу элементарную арифметику.
т.е. по своей сути числа — это в высшей степени абстрактные понятия, но так получилось в жизни что некоторые из них мы интуитивно понимаем с самых ранних лет и поэтому они нам кажутся весьма простыми, особенно натуральные числа.
создало настоящее спагетти из размышлений и выводов, где причина и следствие причудливо меняются местамиВ какой части статьи?
Но до этого Кэп должен заинтересоваться, вообще говоря, а что такое число вообще? Что это такое?С Вашим определением числа я полностью согласен, «все относительно». Но все же непонятно, к чему этот вопрос и как это может повлиять на ход рассуждений статьи?
диссонанс вызывают как раз лишь элементы алгебры и теории чиселДумаю я ответил предыдущим комментарием.
Если где наврал, укажите место. Общие фразы приводят только к раздражению
Это наглядно показывают элементарные вычисления на фасоли, которые я приводил в своей августовской статье. Выполнение алгоритма раскидывания кучи фасоли при невыставленном на доске делителе невозможно начать.
Но Вы раскопали эту тему куда глубже. Браво!
Ваша статья так же повлияла на меня лучшим образом.
Все же, я остаюсь при своем прежнем мнении — причина невозможности делить на ноль коренится в ограничениях, которые накладывает на арифметику фасоль, — т.е. без шуток, — особенностях вычислений в натуральных числах.
Далее этот факт уже распространяется на все виды традиционных чисел в связи с необходимостью иметь согласованную арифметику при расширении их множества пополнением.
Причина невозможности делить на ноль — в том, что мы начинаем с чисел, а не с операций, и объединяем в одну категорию расстояние и номер точки отсчёта.
(a, b) * (c, d) = (a * c + b * d, a * d + b * c)
?PS вот только деление приводит нас к рациональным числам- — и так особые случай с нулем опять проявляется.
Как ни крути, общая алгебра — обобщение элементарной. И даже в общей алгебре ноль остается «особым» элементом для которого допускается отсутствие обратного элемента (для поля). Всем нельзя, нулю можно. А почему? Собственно в этом и смысл рассуждений.
То есть, как обозначается целое число 5?
Кстати, оно эквивалентно натуральному числу 5 или нет?
То есть, как обозначается целое число 5?
Целое число 5 обозначается как 5. Точнее, класс эквивалентности целых чисел, в который входят числа (10, 5), (7, 2) и (123, 118) обозначается символом 5.
Целое число в данной системе — это и есть пара натуральных чисел. А вот привычные нам
"1", "2", "-10"
— это как раз символы, обозначающие такие вот пары.Кстати, оно эквивалентно натуральному числу 5 или нет?Опять некорректный вопрос. Отношение эквивалентности может быть задано только между одинаковыми типами чисел. Однако, определенное соответствие между целым числом 5 и натуральным числом 5 есть. Забыл только, как оно называется.
все числа можно получить из еденицы.
числа Фибоначчи: 1+1=2, 1+2=3, 2+3=5, 3+5=8 и т.д.
здесь проявляется правило золотого сечения, по которому всё во вселенной работает. вроде логика понятна, но возникает вопрос — откуда взялась единица?
логично предположить что 0+0=1, но из школьной программы мы знаем что это не так. понятно что это метафизика, но тема не даёт покоя.
Если мы рассматриваем уравнение a+a+a+a (x раз) = b, то с той же точки зрения, например, неразрешимо уравнение 2+2+… +2 (каков x?)=5.
Если сжульничать и сказать, что оно разрешимо на множестве рациональных чисел, то придется уточнить «что такое взять двойку 2.5 раза».
И самый главный аргумент — что за операция «узнать количество слагаемых», через которую мы определяем x? Такой у нас не определено, точнее, неявно определено имено через деление.
Согласен с Вами, без деления «узнать количество слагаемых» операция не существовала. В этом абзаце деление выражено через сложение для того чтобы показать связь меду операциями. Далее не рассматривается операция «сложения» с хитрым «доп.условием», дублирующим деление (шутка с читателем, как Вы не пройдет). Вместо этого рассматривается «ноль» в контексте 2-х операций (сложение и деление). Выделяются «особые свойства» нуля, отличные свойств всех остальных чисел. Затем делается вывод что заложены де-факто они были в сложении.
Деление «поскребло по дну и взбаламутило воду», но не засорило на дно.
— Закон? — переспросил мистер Дворкин. — Это закон штатный или федеральный? Он принят конгрессом? Вы знаете его номер и дату вступления в силу?
— Нет, но…
— Мистер Зайтлайн, — снисходительно сказал мистер Дворкин. — Можете не объяснять. Мы с мистером Оркиным и мистером Соркиным разбираемся в законах.
www.figvam.ca/cloud/msg.php?id=502530
Есть у меня вот какое подозрение: "деление на ноль", и всё связанное с ним — это артефакт нашей приверженности к линейному письму. А ежели чуть менее радикально подходить, то приверженности к (наивному) теоретико-множественному подходу. Мы стартуем с чисел как "атомов", потом как нечто вторичное к ним вводим операции, а потом ещё и записываем их инфиксно, и привыкаем настолько, что начинаем биться об синтаксические по природе своей ограничения будто бы об острые углы реальности.
Можно по-другому, через Теорию Категорий. Вообще забыть про числа-атомы, начать сразу с трансформаций: нет "1", но есть "не делать ничего", "сдвинуть на единицу", "сдвинуть на единицу обратно"; нет "2", но есть "приблизить вдвое", "отдалить вдвое", "сдвинуть на два", "сдвинуть на два обратно". С этим подходом, нейтральные элементы по сложению и умножению — совпадают, а нуль — не возникает вообще.
Делить на ноль — это норма. Часть 2