Добро пожаловать

Где я?

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

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

Что именно здесь находится?

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

По возможности, на сайте будет собираться полезная информация из других источников в виде ссылок на другие сайты и полезную литературу. Такая информация доступна на странице «Ссылки».

Нужно ли мне это?

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

Если Вы новичок, то не обязаны знать всё, что здесь написано, но базовое понимание арифметики, изложенное здесь — строго обязательно.

Если Вы профессионал в программировании, то и для Вас найдётся интересный материал.


Желаю успехов в освоении компьютерной арифметики!

О сайте

Проект находится в разработке. Многое здесь может измениться.

О чём этот сайт и каковы его задачи?

Сайт посвящён изучению современной компьютерной арифметики.

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

Другой недостаток существующей литаратуры в том, что она носит скорее теоретический характер. Авторы книг и статей не учат кодировать свои идеи, а предлагают лишь некие алгоритмы, о практической эффективности которых остаётся только гадать.

Ещё один недостаток существующей литаратуры в том, что она сильно разнознена. Отыскать ответы на свои вопросы чрезвычайно трудно, особенно когда не знаешь, с чего начать и где искать.

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

Кому полезен этот проект?

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

С другой стороны, профессионалу может показаться интересным вопрос собственной реализации функций для работы с плавающей арифметикой, вопросы правильного округления и всё прочее, что неизбежно, например, при создании собственного компилятора. Таким людям здесь самое место!

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

При заимствовании материала прошу только по возможности оставлять ссылку на источник.

Как подаётся информация?

Вся информация на сайте представлена статьями, разбитыми по рубрикам, образующим некоторую древовидную структуру. Рубрики выделяются ссылками, наподобии этой: Это несуществующая рубрика.

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

Текст, выделенный вот так, является моноширинным. Такое выделение означает, что речь идёт о каком-то участке кода, значении чего-либо, а порой оно будет использоваться для выделения обычных чисел для удобства обращения на себя внимания. Например, 42×1016.

Все программы даны на языках C++ и Assembler, либо на псевдокоде, где это представляется более удобным. Листинги программ будут выделяться особо с помощью подсветки синтаксиса.

Все математические формулы буду даны на сайте в формате TeX и отображены с помощью MathJax, поэтому если вы не видите эту формулу правильно (в виде картинки в отдельной строке): $$ \frac{1}{2\pi i}\oint_C \frac{dz}{z-a}, $$ то вряд ли сможете читать данный сайт. Бывает, что формулы отображаются медленно, поэтому может потребоваться немного времени для их полной загрузки. Вы можете кликнуть по формуле ней правой кнопкой и изучить дополнительные опции её отображения (например, способ отрисовки).

Кто автор проекта?

Автор — Артём Михайлович Караваев, кандидат физико-математических наук по направлению «дискретная математика и математическая кибернетика». Связаться со мной можно по почте zealint [at] zealcomputing [dot] ru.

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