Страница Дмитрия Косовца | ||
Меню |
Приветствую на своей странице, гость!
Меня зовут Дмитрий Косовец, я программист и тестировщик ПО, получил диплом ВМК МГУ,
работал в разных местах, как с Web-технологиями, так и со standalone приложениями, как с backend, так и с frontend, мне нравятся Delphi и Perl, хотя имел дело и с другими языками.
Также нравится TeX, в котором в студенческие годы небольшими коллективами были подготовлены материалы по лекциям. Мне нравятся виниловые пластинки, кактусы на подоконнике, грейпфруты и не только. МатериалыМатериалы по учебе на ВМК МГУ есть на ресурсах:
Материалы, подготовленные с моим участием или лично мной:
Перемена мест слагаемыхЗапомнилась мысль, актуальная для программистов «От перемены мест слагаемых сумма меняется!» Действительно, в начальной школе учат, что от перемены мест слагаемых сумма не меняется, но в компьютере не такое сложение. На самом деле, даже сложением в строго математическом смысле его назвать сложно, но в тексте компьютерных программ может фигурировать знак плюс +, который ассоциируется с обычной арифметикой. В компьютере числа представляться могут по-разному, но неизбежно будут ограничения. Обычная небольшая ячейка памяти для целого числа не сможет хранить в себе результат сложения двух достаточно больших чисел, в нее влезающих, произойдет переполнение. Но с этим еще можно как-то мириться, использовать другие представления для больших чисел, специальные библиотеки. Интересно, что при работе с вещественными числами с одной стороны, переполнения может не произойти, но с другой стороны, ввиду дискретности, а не непрерывности представления вещественных чисел, может возникнуть ситуация, когда результат сложения несколько отличается. И здесь сложно давать конкретные советы, потому что даже при использовании библиотеки для работы с числами высокой точности при работе цикла с большим количеством итераций может накопиться серьезная ошибка. Поэтому нужно опираться на конкретную задачу, анализировать ее, и, возможно, придумывать алгоритм именно под данную задачу для работы с вещественными числами. Известен гармонический ряд, сумма дробей с единицей в числителе и последовательными натуральными числами в знаменателе, то есть единица, одна вторая, одна треть и т.д. Ряд бесконечен, но можно вычислить сумму его первых членов. Была написана тестовая программа на PHP с использованием обычных вещественных чисел, встроенных в сам язык. Программа рассчитывала двумя способами сумму первых 10 000 000 000 членов гармонического ряда, от больших к меньшим и от меньших к большим. Для контроля была использована система Wolfram Alpha, которая рассчитала сумму 23,603066594891989700785593303592... При расчете от меньшего к большему программа выдала результат 23,603066594888 (10 корректных цифр после запятой), но при «наивном» расчете от большего к меньшему программа выдала результат 23,603066594998 (9 корректных цифр после запятой). Интересно, что при работе с вещественными числами по умолчанию идет представление с плавающей запятой. В таком представлении в десятичной системе счисления есть мантисса — число, представляющее собой дробь от 1,0 до 9,999..., и экспонента — показатель степени числа 10, на которую умножается мантисса. Например: 3,5 микрограмма есть 3,5 умноженное на 10 в степени −9 килограмм. 5,1 тонны есть 5,1 умноженное на 10 в степени 3 килограмм. В компьютере же используется двоичная система и мантисса есть двоичная дробь, которая умножается на 2 в степени экспоненты. При попытке суммировать два числа с существенно отличающимися экспонентами сумма может быть равна числу с большей экспонентой. Нетрудно догадаться, что в таком случае возможны совсем неверные расчеты, если большое количество чисел с небольшой экспонентой должны образовать значительную сумму. Также была написана программа на PHP, использующая стандартную библиотеку BCMath, отдельный модуль PHP. В ней число представляется строкой. Была использована точность 25 знаков после запятой, что дало результат одинаковый и при расчете от меньшего к большему, и «наивным» способом от большего к меньшему 23.6030665948919892007955680 (15 корректных цифр после запятой, 10 дальнейших цифр ошибочны). Это лучше, чем при использовании средств языка по умолчанию, но пользоваться даже таким методом для точных расчетов нельзя.
Деление на нольКак известно из начальной школы, на ноль делить нельзя. Есть хитрые надстройки, позволяющие что-то выдумать, но обычные вещественные числа на ноль не делятся. Если даже придумать некоторый воображаемый результат деления на ноль, встанет вопрос о взаимодействии уже этого результата с обычными числами, и возникнет сложность. В компьютере же что-то должно получиться, если производится деление на ноль. Это необходимо предусмотреть ввиду возможности по ходу выполнения алгоритма деления на ноль. Простой пример: вы стоите в поле, в точке А. За километр от вас точка Б. Вы стоите на месте, то есть ваша скорость ноль километров в час. Очевидно, что не имеет смысла вопрос, когда вы попадете в точку Б, так как вы в нее не попадете таким образом. Аналогично не имеет смысла вопрос, когда вы попадете в точку А, так как вы в ней находитесь все время. Когда производится деление положительного вещественного числа на ноль, условно компьютер предполагает, что результат стремится к плюс бесконечности. Аналогично при делении отрицательного числа на ноль результат предположительно стремится к минус бесконечности. При делении же нуля на ноль результат неопределен. Соответственно, есть три варианта результата деления на ноль в компьютере: +INFINITY, -INFINITY, Not A Number. В программах необходимо обрабатывать особым образом такие результаты и не производить с ними дальнейших действий, потому что это бессмысленно.
Интересно, что в классическом математическом анализе не вводится результатов, подобных вышеупомянутым +INF, -INF, NaN. Но это сделано в системе Wolfram Alpha, которая весьма продвинута. Действительно, нетрудно убедиться, что есть разница между отсутствием производной в точке области определения потому, что график функции «переламывается» и касательной нет в данной точке, потому, что производная стремится к плюс бесконечности слева и справа от данной точки, потому, что производной вообще нет ни в данной точке, ни в ее небольшой окрестности. Возможны и другие варианты. Шут на будильникеСуществуют, помимо обычных игральных, карты Таро, их 78 арканов в колоде. На них чаще гадают и медитируют. В колоде 22 Старших аркана и по 14 Младших арканов четырех мастей. Арканы описывают глобально мироздание, огромными пластами архетипов. Изображают эти арканы по-разному в разных колодах, популярная светлая колода называется Райдера-Уэйта. Артур Эдвард Уэйт ее создал, Уильям Райдер ее первый издатель, а художник — Памела Колеман Смит. Мне нравится открывающий колоду Старший аркан Таро Шут, изобразил его в своей интерпретации на бумаге, картинка открывается в большем размере. Таро еще называют Приключения Шута, и именно этот молодой человек беспечен с узелком на пути к обрыву, а собака его останавливает, хватая за ногу. Солнце светит на эту картину сверху. У меня сцена изображена на будильнике, стрелки которого направлены вверх. Следующий Старший аркан — Маг. У меня он тоже немного изменен по сравнению с колодой Райдера-Уэйта, к четырем символам стихий добавлен символ квинтэссенции — крылатое яйцо. Картинка также открывается в большем размере. Молодой человек призывает дух свыше в своем жесте, перед ним на столе лежат жезл, чаша, меч и пентакль, символы стихий Огня, Воды, Воздуха и Земли. Над ними парит крылатое яйцо, символ квинтэссенции или эфира. Вокруг зелень обвивает картинку. По Таро Райдера-Уэйта могу порекомендовать книгу Андрея Костенко Таро Уэйта как система: теория и практика. Также изобразил кактус со своего подоконника, картинка также открывается в большем размере. На картинке не видно, но у кактуса пушистые колючки, а не твердые. © 2020-2024 Дмитрий Косовец, |