ї виражені через ці дві. При роботі
операцій <і! = спочатку перевіряються знаки і довжини чисел, і
тільки у разі їх збігу виробляється порозрядне
порівняння чисел (в якості розрядів тут беруться цілі
байти - тобто розряди в системі числення з підставою 100).
Реалізація операцій арифметики:
Операція унарний + просто повертає саме число.
Операція унарний - повертає новий об'єкт класу UNLIM,
який посилається на те ж подання модуля числа, що і
аргумент, і має знак, протилежний знаку аргументу.
Операція бінарний + визначена і для випадків, коли
знаки операндів збігаються, і коли ці знаки різні.
У першому випадку знак результату відповідає знаку
одного (кожного) з операндів, а модуль результату є
результатом складання модулів операндів. При цьому якщо
кількість розрядів першого операнда одно A, а другого - B,
то кількість розрядів операнда може бути або max (A, B),
або max (A, B) +1, тому при виділенні пам'яті під масив для
модуля результату береться друге значення. Ніякої
оптимізації цього масиву після складання модулів операндів
не робиться, так як в даному випадку втрата пам'яті на
лідируючі нулі може бути максимум 1 байт, і вигідніше
заощадити на швидкості, ніж на пам'яті.
У разі, коли знаки операндів різні, знак
результату дорівнює знаку операнда з максимальним модулем, а
модуль результату вийдуть вирахуванням модуля операнда з
мінімальним модулем з модуля операнда з максимальним
модулем. При цьому під модуль результату виділяється масив
довжини, рівної найбільшою з довжин операндів, але після
віднімання чисел він оптимізується функцією optimize (),
яка видаляє лідируючі нулі (створює новий масив довжини,
необхідної для зберігання модуля числа без лідируючих нулів,
копіює в нього все значущі розряди, переадресовує
посилання дескриптора на цей масив і видаляє старий масив).
Додавання і віднімання модулів аргументів проводиться в
системі числення з основою 100.
Операція бінарний - визначена через унарний мінус і
бінарний плюс.
Операція * проводиться за технології, аналогічної
множенню в стовпчик. При цьому всі дії ведуться в системі
числення з основою 100. Довжина масиву результату може
дорівнювати або сумі довжин операндів, або цій сумі мінус
1. Ця ситуація аналогічна тій, яка була при додаванні
чисел з однаковим знаком, і тут теж не робиться
оптимізації.
Операція <<- просто операція виведення класу OSTREAM,
визначена для класу UNLIM. Спочатку вона виводить '-' якщо
знак числа негативний, а потім саме число поразрядно (за
десятковим розрядам), починаючи з старшого. При цьому
...