Pull to refresh

Comments 59

Я в Lua столкнулся с бесконечностями и неопределённостями при пребразовании таблиц в компилируемый текст. Я не стал использовать константы а использовал какраз любимые выражения с нулем.

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
Что?.. Во всех языках логические операции с неопределенностью всегда ложны, а в lua — истинны?!
ошибочка похоже затесалась.
Спасибо поправил. Операции сравнения действительно все ложны.
Хм. Вроде бы как NaN принято проверять как (value != value), так как NaN не равен ни чему, в том числе и самому себе.
Такой вариант я не догадался проверить.
Спасибо!
К моему счастью, тема «деления на ноль» раскрыта по максимуму. Сейчас мне добавить уже нечего. Так что это финал.
Эммм… Как неожиданно: я думал, что будет еще несколько статей, чтобы до конца понять ВООБЩЕ ВСЁ (а теперь придется эти две курить глубже или наконец собраться с силами и осилить серьезный учебник по алгебре). Может быть напишите еще что-нибудь по математике в том же стиле — очень уж интересно читать, особенно про нестандартные (для обывателя) вещи?
А у Вас остались еще вопросы? Я, на полном серьезе, не представляю куда можно развить глубже.

Хотя тут интересная дискуссия началась. Поднятый там вопрос я в статье не раскрывал. Но похоже мы дискутируем уже не про «деление на ноль», а про «арифметики и с чем их едят».
про «арифметики и с чем их едят»
Вполне можно раскрыть эту тему «для чайников».
Тут же весь вопрос в том, что мы зачастую и понятия не имеем, насколько наука ушла за границы привычных понятий и оперирует «запретными» вещами. Тут как с нулем — ну нельзя делить и нельзя, потому что нарушается базовая аксиоматика. Так и остальные вопросы (типа нестандартного анализа и проч.) — мы просто не догадываемся, что там, «за пределами» тоже есть «жизнь». Потому и вопросы не возникают — мы вообще не в курсе про существование этой области знаний. Конечно, для людей со специальным образованием это всё может показаться наивным, но прикоснуться к другим граням математики — это очень и очень интересно, хотя бы для расширения кругозора.
PS В комментарии выше я имел ввиду больше не собственно про деление на ноль, а как раз раскрытие смежных тем.
Согласен, материал «для чайников» по конкретному вопросу тяжело найти. Есть общие сборники, но там опять же обо всем. Объем большой, разобраться тяжело.

Как будет вдохновение, можно и другие темы раскрыть :)
Tl;dr

Исходя из написанного, каков результат деления пяти на ноль?
Рад, что статья оказалась для Вас полезной!
Мне логика знакового нуля до сих пор не понятна, почему так происходит?
// Если
0===-0
true
// то результаты
1/-0
-Infinity
// и
1/0
Infinity
// должны быть одинаковыми. Разве не так?

В этом случае всё ломает, но чёткого ответа почему так происходит я не нашёл. Может плохо прочитал статью…
Это особенность реализации операции сравнения в стандарте IEEE 754. Арифметика более-менее замкнута относительно нулей. Это не описано в статье, но операция сравнения дана в стандарте «по определению» (пруф). Соответственно, работает уже поверх арифметики.

Скорее всего принято для чтобы не засорять код проверками на оба нуля, но это лишь мое предположение.
Не совсем так. Просто отличить один ноль от другого можно только в одном случае — когда они записаны в виде константы. Любая арифметическая операция уже не способна дать знаковый ноль, лишь беззнаковый.

Поэтому к знаковым нулям все же стоит относиться не как к фундаментальной части арифметики, а лишь как к особенности, подозрительно похожей на баг (собственно, знаковый ноль — это и есть баг формата чисел с плавающей запятой, с которым все давно смирились).

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

Почему же они не равны? Потому что бесконечность, полученная в результате вычислений — не очень частый гость. Чаще всего бесконечности следует вообще рассматривать как еще один вариант NaN, фильтруя все скопом функцией isFinite.

Но, вместе с тем, знаковая бесконечность — дико удобное значение для граничных элементов при сравнениях!
Я считаю, истинные порождающие операции этих чисел — не деление, а нахождение максимума и минимума:
console.log(Math.max(), Math.min()); // -Infinity, Infinity
В JavaScript есть операция которая возвращает отрицательный ноль.
console.log(Math.round(-0.5)) // -0
Опять ноль присутствует в виде константы. Это — не «боевой» сценарий.
А 5-5 — это какой ноль должен быть — положительный или отрицательный? :)

Нет, понятно, что в js будет положительный, какой он должен быть «на самом деле»? И в чем вообще смысл знака у этого нуля?
Как определите в своей системе так и будет. Тут нет единственно правильного подхода.
Лично я считаю, что вопрос не имеет смысла, и определяю такой ноль как беззнаковый. А тот факт, что в компьютере он все равно представлен знаковым нулем — это уже деталь реализации.

Да, можно исхитриться, и определить какую-нибудь расширенную арифметику, где знаки у нуля в подобных ситуациях будут определены. В таком случае часть правил, прописанных в IEEE 754, окажется «в тему». Но я еще не сталкивался с задачами, где бы это пригодилось — ни разу.
Оффтоп
Верхняя картинка — из 5-минутной короткометражки «Черная дыра». Интересная зарисовка.
В целом, если смотреть на статью с точки зрения задачи популяризации науки читать интересно. Мне текст понравился. Но имея высшее математическое образование очень тяжело его воспринимать. Намерение автора сущности высокой степени абстрактности объяснить просто создало настоящее спагетти из размышлений и выводов, где причина и следствие причудливо меняются местами.

Для начала, сама проблема с делением на 0 по сути является выдуманной. Точнее она проблема примерно из того же класса, почему уравнение x = SQRT(-1) тоже не разрешимо в рамках школьного курса математики. Или вычитание из меньшего большее в начальной школе.

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

Но до этого Кэп должен заинтересоваться, вообще говоря, а что такое число вообще? Что это такое?

Один из лейтмотивов статьи — это трепанация арифметических операций в основном для привычных нам числел, таких как натуральные, целые, рациональные и т.п. с привлечением вкраплений из АТЧ.

Замечательный вывод из рассуждений:
Поле, венец универсальности, “за уши” притянуто к элементарной арифметике.

Мягко говоря, ставит все с ног на голову.

Привычные, нам числа и операции в элементарной математике, с т.з. алгебры и теории чисел — это лишь одна из простых моделей элементов абстрактной алгебры. Группы, кольца, поля, тела — имеют под собой стройное аксиоматическое основание, которое разрешает все вышеприведенные вопросы(которые, вообще говоря, там просто не возникают) и с точки зрения понимания сути вещей и с т.з. философии.

Привычные нам числа и операции очень вторичны по отношению к объектам абстрактной алгебры, которые непротиворечиво описывают куда более широкий класс объектов реального мира на самых разных его масштабах.

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

Да, в статье рассматривается частный случай, когда общая алгебра оперирует числами. Если бы «у нас» вопросы не возникали по этому поводу «почему делить нельзя», то этой статьи бы не было. Суть, описана в пункте «2.1 Зачем вообще напрягаться?»

В общем мы тут о арифметике и делении на ноль, а не об общей алгебре.

saaivs, может Вы дадите определение числа, которое покроет все случаи? ;) Мне не удалось
С точки зрения арифметики, вы сделали интересную работу. Я уже упомянул, что у меня в изложении диссонанс вызывают как раз лишь элементы алгебры и теории чисел. Точнее даже акцент подачи. Сами упоминания вполне могут быть уместны. А в целом, все весьма интересно и в чем-то познавательно.

Относительно определения числа — все достаточно просто с позиций АТЧ.
«число» — в общем случае, это элемент множества(носителя) для заданной алгебраической системы. Выбирая подходящую сигнатуру алгебры мы получаем всю нашу элементарную арифметику.

т.е. по своей сути числа — это в высшей степени абстрактные понятия, но так получилось в жизни что некоторые из них мы интуитивно понимаем с самых ранних лет и поэтому они нам кажутся весьма простыми, особенно натуральные числа.
Подведем итог:

создало настоящее спагетти из размышлений и выводов, где причина и следствие причудливо меняются местами
В какой части статьи?

Но до этого Кэп должен заинтересоваться, вообще говоря, а что такое число вообще? Что это такое?
С Вашим определением числа я полностью согласен, «все относительно». Но все же непонятно, к чему этот вопрос и как это может повлиять на ход рассуждений статьи?

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

Если где наврал, укажите место. Общие фразы приводят только к раздражению
В конце статьи получился примерно такой эффект:
UFO just landed and posted this here
>> Мы не можем делить на ноль, потому что забыли что однажды смешали понятие “ничто” и понятие “количество”.

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

Но Вы раскопали эту тему куда глубже. Браво!
Спасибо!
Ваша статья так же повлияла на меня лучшим образом.
Хотя… при некотором размышлении, становится ясно, что никакого исключения для «ничто» нет. Ибо «количество» есть частный случай мощности, единица — есть мощность одноэлементного множества, а нуль — пустого.

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

Далее этот факт уже распространяется на все виды традиционных чисел в связи с необходимостью иметь согласованную арифметику при расширении их множества пополнением.
В теории множеств не определена операция деления как таковая (пересечение, разность, дополнение, но не деление). Конечно там никакого исключения нет :). Но арифметические операции и операции на множествах — несколько разные вещи.

Причина невозможности делить на ноль — в том, что мы начинаем с чисел, а не с операций, и объединяем в одну категорию расстояние и номер точки отсчёта.

Ваши рассуждения имели бы смысл, если бы в современной математике целые числа определялись «как натуральное со знаком или ноль». Сейчас целое число определяется как пара натуральных чисел с точностью до соотношения эквивалетности. Это отношение эквивалентности называет два целых числа (a, b) и (c, d) равными если a + d = b + c. Cложение определяется как (a, b) + (c, d) = (a + c, b + d). Вычитание как (a, b) — (c, d) = (a + d, b + c). Умножение определяется как (a, b) * (c, d) = (a * c + b * d, a * c + b * d). Никаких особых правил для нуля у целых чисел нет.
Да, тут для особого нуля тут места нет. Но похоже Вы привели пример алгебраической системы, очень похожей на элементарную алгебру. Я прям представил, как в первом классе изучают фактормножество целых чисел. Боюсь мы сможем поговорить предметно, когда увидим купюру в (12, 405) $. Но пока у нуля особых правил вагон и маленькая тележка.
Вы, наверное, хотели написать (a, b) * (c, d) = (a * c + b * d, a * d + b * c)?

PS вот только деление приводит нас к рациональным числам- — и так особые случай с нулем опять проявляется.
Я скорее про то что эта статья про «элементарную алгебру» в чистом виде, а не про ее интерпретацию через общую алгебру. Плюс, мне кажется, Вы описываете какую-то другую алгебраическую систему. Если Вас не затруднит, дайте ссылку на первоисточник.

Как ни крути, общая алгебра — обобщение элементарной. И даже в общей алгебре ноль остается «особым» элементом для которого допускается отсутствие обратного элемента (для поля). Всем нельзя, нулю можно. А почему? Собственно в этом и смысл рассуждений.
А как отображаются на таким образом заданное множество целых чисел «обычные» натуральные числа?
То есть, как обозначается целое число 5?
Кстати, оно эквивалентно натуральному числу 5 или нет?
Число 5 представляется как (6, 1), 10 как (11, 1), и.т.д.
Всё, понял, спасибо.
Это приблизительно то же, как рациональные вводятся через пары целых.
1/2 = 2/4 = 3/6 =… и т.д.
То есть, как обозначается целое число 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, но из школьной программы мы знаем что это не так. понятно что это метафизика, но тема не даёт покоя.
Комментатор, смотри
  • «правило золотого сечения, по которому всё во вселенной работает» — инфа 100%?
  • «логично предположить что 0+0=1» — для меня переход не логичен. Сможете пояснить по подробнее?
Не смог прочувствовать выражение, про «деление не виновато, что на ноль делить нельзя».
Если мы рассматриваем уравнение a+a+a+a (x раз) = b, то с той же точки зрения, например, неразрешимо уравнение 2+2+… +2 (каков x?)=5.
Если сжульничать и сказать, что оно разрешимо на множестве рациональных чисел, то придется уточнить «что такое взять двойку 2.5 раза».
И самый главный аргумент — что за операция «узнать количество слагаемых», через которую мы определяем x? Такой у нас не определено, точнее, неявно определено имено через деление.
Вы все правильно поняли, на определенном этапе «эволюции» (есть сложение, вычитание умножение, деление и целые числа) уравнение 2+2+… +2 =5 — неразрешимо, однако после ввода рациональных дробей (можно ими ограничиться и не вводить множество рациональных) все начинает стыковаться (все три вида уравнений остаются разрешимы для любых ненулевых чисел). Почему «дополнительное условие» именно такое и почему появились именно рациональные дроби я не раскрывал. Тут нет хитрой уловки. Цель не загромождать и так длинную статью.

Согласен с Вами, без деления «узнать количество слагаемых» операция не существовала. В этом абзаце деление выражено через сложение для того чтобы показать связь меду операциями. Далее не рассматривается операция «сложения» с хитрым «доп.условием», дублирующим деление (шутка с читателем, как Вы не пройдет). Вместо этого рассматривается «ноль» в контексте 2-х операций (сложение и деление). Выделяются «особые свойства» нуля, отличные свойств всех остальных чисел. Затем делается вывод что заложены де-факто они были в сложении.

Деление «поскребло по дну и взбаламутило воду», но не засорило на дно.
есть закон, не позволяющий делить на ноль. А то получится бесконечность или вообще чёрт знает что.

— Закон? — переспросил мистер Дворкин. — Это закон штатный или федеральный? Он принят конгрессом? Вы знаете его номер и дату вступления в силу?

— Нет, но…

— Мистер Зайтлайн, — снисходительно сказал мистер Дворкин. — Можете не объяснять. Мы с мистером Оркиным и мистером Соркиным разбираемся в законах.

www.figvam.ca/cloud/msg.php?id=502530
Нам наваливают правила с детства, а потом говорят что по ним жить хорошо. Самое интересное, что многие даже не сомневаются :)
А выходит как-то так

Есть у меня вот какое подозрение: "деление на ноль", и всё связанное с ним — это артефакт нашей приверженности к линейному письму. А ежели чуть менее радикально подходить, то приверженности к (наивному) теоретико-множественному подходу. Мы стартуем с чисел как "атомов", потом как нечто вторичное к ним вводим операции, а потом ещё и записываем их инфиксно, и привыкаем настолько, что начинаем биться об синтаксические по природе своей ограничения будто бы об острые углы реальности.

Можно по-другому, через Теорию Категорий. Вообще забыть про числа-атомы, начать сразу с трансформаций: нет "1", но есть "не делать ничего", "сдвинуть на единицу", "сдвинуть на единицу обратно"; нет "2", но есть "приблизить вдвое", "отдалить вдвое", "сдвинуть на два", "сдвинуть на два обратно". С этим подходом, нейтральные элементы по сложению и умножению — совпадают, а нуль — не возникает вообще.

Sign up to leave a comment.

Articles