Вспомогательные модули

Приведенные здесь модули не претендуют на эффективность, но, как мы надеемся, вполне пригодны в качестве учебного материала. Модули на C++ написаны в ОО-стиле, паскалевские — сознательно нет. К каждому модулю прилагается небольшая программа для демонстрации работы с ним.

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

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

Модуль на C++ для арифметических операций над длинными целыми числами из книги Leen Ammeraal “Algorithms and Data Structures in C++”, Chichester: John Wiley, 1996.

Модификация предыдущего модуля с использованием STL из книги “STL for C++ Programmers”, Chichester: John Wiley, 1997, того же автора. (Имеется русский перевод: Леен Аммерааль, «STL для программистов на C++», М.: ДМК, 1999.)

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

If Abs(x-x0) <= Eps*x0 Then ... { Почти равны }

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

Относительно работы с геометрическими объектами на языке C++ см., например, книгу Майкла Ласло «Вычислительная геометрия и компьютерная графика на C++».

Вернуться на главную страницу


Valid CSS! Valid XHTML 1.0!
Webmaster: Антон Лапунов
Используются технологии uCoz