Приведенные здесь модули не претендуют на эффективность, но, как мы надеемся, вполне пригодны в качестве учебного материала. Модули на 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++».