Страница:
гих задач. Если заранее не известно, какова будет длина
цепочки, распределитель принимает значение для ввода и ком-
пиляции (т.е. команды, заключенные в квадратные скобки
[...]). Результат был таков, что при скромной стоимости во
время выполнения все соображения по поводу распределения
цепочек и размеров цепочек были удалены из оставшейся части
программы, и отладка стала более легкой. Используемый метод
тратил примерно 25% доступной памяти.
Выбор числа 100 как основания системы счсления для
внутренней арифметики по-видимому не имеет явного преиму-
щества. Кроме того, основание системы счисления не должно
превышать 127 из-за аппаратных ограничений; и при стоимости
5% памяти отладка стала много легче, а десятичный вывод
существенно быстрее.
Причина создания арифметики стекового типа - дать воз-
можность всем командам dc от сложения до выполнения подпрог-
рамм по-существу выполняться одинаково. Результатом явилось
значительноя степень логического разделения конечной прог-
раммы на модули с очень маленькой связью между ними.
Из-за недостатка взаимодействия между шкалой и основа-
ниями систем счисления разумным было обеспечить понимаемость
способа выполнения после изменения шкалы или основания,
когда числа уже были введены. Ранняя версия, которая имела
глбальные понятия шкалы и основания системы счисления, не
была хорошо разработана. Если значение scale интерпретирова-
лось в текущей вводной или выводной системе счисления, то
изменение системы счисления или шкалы в середине вычисления
мог вызвать неправильную интерпретацию результатов. Текущая
схема имеет то преимущество, что значение входного и выход-
ного оснований систем счисления используется только для
вводы и вывода соответственно, и игнорируется во всех других
действиях. Значение шкалы не используется для любых сущест-
венных целей в любой части программы, а используется только
для того, чтобы предотвратить увеличение количества десятич-
ных знаков за границы текущей точности.
Разумным решением выбора шкалы результатов арифметичес-
ких действий было бы то, что при явном указании пользователя
ни одна значащая цифра не должна быть отброшена. Действи-
тельно, если пользователь хочет сложить числа 2.5 и 3.1415,
то кажется разумным дать ему результат 5.6415, поскольку в
остальных значащих цифрах нет необходимости.
С другой стороны, при умножении и возведении в степень
вырабатывается результат с количеством цифр большим, чем у
- 29 -
операндов, и кажется разумным дать как мимнимум количество
цифр в операндах, а не больше, если только пользователь не
укажет явно количество цифр, определив значение scale.
Квадратный корень может быть вычислен так же, как и умноже-
ние. Вполнение деления дает произвольное количество цифр, и
не так просто предположить пожелания пользователя относи-
тельно количества цифр. В этом случае пользователь должен
определить значение scale. Шкала остатка выбрана для того,
чтобы можно было восстановить делимое из частного и остатка.
Это легко выполнить: ни одна цифра не отбрасывалась.
- 30 -
СОДЕРЖАНИЕ
АННОТАЦИЯ ......................................... 2
1. ВВЕДЕНИЕ .......................................... 2
2. ИНТЕРАКТИВНЫЙ КАЛЬКУЛЯТОР bc ...................... 3
2.1. Простые действия с целыми числами ............... 3
2.2. Основания систем счисления ...................... 4
2.3. Масштабирование ................................. 6
2.4. Функции ......................................... 7
2.5. Индексированные переменные ...................... 8
2.6. Управляющие операторы ........................... 9
2.7. Некоторые детали ................................ 11
2.8. Три важные вещи ................................. 12
2.9. Детальное описание .............................. 13
2.9.1. Обозначения ................................... 13
2.9.2. Знаки ......................................... 13
2.9.2.1. Комментарии ................................. 13
2.9.2.2. Идентификаторы .............................. 13
2.9.2.3. Ключевые слова .............................. 13
2.9.2.4. Константы ................................... 14
2.9.3. Выражения ..................................... 14
2.9.3.1. Простые выражения ........................... 14
2.9.3.1.1. Именованные выражения ..................... 14
2.9.3.1.2. Вызовы функций ............................ 14
2.9.3.1.3. Константы ................................. 15
2.9.3.1.4. Круглые скобки ............................ 15
2.9.3.2. Унарные операции ............................ 15
2.9.3.3. Операция возведения в степень ............... 16
2.9.3.4. Операции группы умножения ................... 16
2.9.3.5. Операции группы сложения .................... 16
2.9.3.6. Операторы присваивания ...................... 17
2.9.4. Отношения ..................................... 17
2.9.5. Классы памяти ................................. 17
2.9.6. Операторы ..................................... 18
2. ИНТЕРАКТИВНЫЙ СТЕКОВЫЙ КАЛЬКУЛЯТОР dc ............. 20
2.1. Описание синтаксиса ............................. 20
2.2. Детальное описание .............................. 22
2.2.1. Внутреннее представление чисел ................ 22
2.2.2. Распределитель памяти ......................... 23
2.2.3. Внутренняя арифметика ......................... 24
2.2.4. Сложение и вычитание .......................... 25
2.2.5. Умножение ..................................... 25
2.2.6. Деление ....................................... 25
2.2.7. Нахождение остатка ............................ 26
2.2.8. Вычисление квадратного корня .................. 26
2.2.9. Возведение в степень .......................... 26
2.2.10. Перевод вводных чисел и входная система счисле-
ния ........................................... 26
- 31 -
2.2.11. Выводные команды .............................. 27
2.2.12. Выходной формат и выходная система счисления .. 27
2.2.13. Внутренние регистры ........................... 27
2.2.14. Стековые команды .............................. 27
2.2.15. Описания и вызовы функций ..................... 28
2.2.16. Внутренние регистры - программирование на dc .. 28
2.2.17. Стековые регистры и массивы ................... 28
2.2.18. Прочие команды ................................ 28
2.3. Выбор решений ................................... 29
- 32 -
цепочки, распределитель принимает значение для ввода и ком-
пиляции (т.е. команды, заключенные в квадратные скобки
[...]). Результат был таков, что при скромной стоимости во
время выполнения все соображения по поводу распределения
цепочек и размеров цепочек были удалены из оставшейся части
программы, и отладка стала более легкой. Используемый метод
тратил примерно 25% доступной памяти.
Выбор числа 100 как основания системы счсления для
внутренней арифметики по-видимому не имеет явного преиму-
щества. Кроме того, основание системы счисления не должно
превышать 127 из-за аппаратных ограничений; и при стоимости
5% памяти отладка стала много легче, а десятичный вывод
существенно быстрее.
Причина создания арифметики стекового типа - дать воз-
можность всем командам dc от сложения до выполнения подпрог-
рамм по-существу выполняться одинаково. Результатом явилось
значительноя степень логического разделения конечной прог-
раммы на модули с очень маленькой связью между ними.
Из-за недостатка взаимодействия между шкалой и основа-
ниями систем счисления разумным было обеспечить понимаемость
способа выполнения после изменения шкалы или основания,
когда числа уже были введены. Ранняя версия, которая имела
глбальные понятия шкалы и основания системы счисления, не
была хорошо разработана. Если значение scale интерпретирова-
лось в текущей вводной или выводной системе счисления, то
изменение системы счисления или шкалы в середине вычисления
мог вызвать неправильную интерпретацию результатов. Текущая
схема имеет то преимущество, что значение входного и выход-
ного оснований систем счисления используется только для
вводы и вывода соответственно, и игнорируется во всех других
действиях. Значение шкалы не используется для любых сущест-
венных целей в любой части программы, а используется только
для того, чтобы предотвратить увеличение количества десятич-
ных знаков за границы текущей точности.
Разумным решением выбора шкалы результатов арифметичес-
ких действий было бы то, что при явном указании пользователя
ни одна значащая цифра не должна быть отброшена. Действи-
тельно, если пользователь хочет сложить числа 2.5 и 3.1415,
то кажется разумным дать ему результат 5.6415, поскольку в
остальных значащих цифрах нет необходимости.
С другой стороны, при умножении и возведении в степень
вырабатывается результат с количеством цифр большим, чем у
- 29 -
операндов, и кажется разумным дать как мимнимум количество
цифр в операндах, а не больше, если только пользователь не
укажет явно количество цифр, определив значение scale.
Квадратный корень может быть вычислен так же, как и умноже-
ние. Вполнение деления дает произвольное количество цифр, и
не так просто предположить пожелания пользователя относи-
тельно количества цифр. В этом случае пользователь должен
определить значение scale. Шкала остатка выбрана для того,
чтобы можно было восстановить делимое из частного и остатка.
Это легко выполнить: ни одна цифра не отбрасывалась.
- 30 -
СОДЕРЖАНИЕ
АННОТАЦИЯ ......................................... 2
1. ВВЕДЕНИЕ .......................................... 2
2. ИНТЕРАКТИВНЫЙ КАЛЬКУЛЯТОР bc ...................... 3
2.1. Простые действия с целыми числами ............... 3
2.2. Основания систем счисления ...................... 4
2.3. Масштабирование ................................. 6
2.4. Функции ......................................... 7
2.5. Индексированные переменные ...................... 8
2.6. Управляющие операторы ........................... 9
2.7. Некоторые детали ................................ 11
2.8. Три важные вещи ................................. 12
2.9. Детальное описание .............................. 13
2.9.1. Обозначения ................................... 13
2.9.2. Знаки ......................................... 13
2.9.2.1. Комментарии ................................. 13
2.9.2.2. Идентификаторы .............................. 13
2.9.2.3. Ключевые слова .............................. 13
2.9.2.4. Константы ................................... 14
2.9.3. Выражения ..................................... 14
2.9.3.1. Простые выражения ........................... 14
2.9.3.1.1. Именованные выражения ..................... 14
2.9.3.1.2. Вызовы функций ............................ 14
2.9.3.1.3. Константы ................................. 15
2.9.3.1.4. Круглые скобки ............................ 15
2.9.3.2. Унарные операции ............................ 15
2.9.3.3. Операция возведения в степень ............... 16
2.9.3.4. Операции группы умножения ................... 16
2.9.3.5. Операции группы сложения .................... 16
2.9.3.6. Операторы присваивания ...................... 17
2.9.4. Отношения ..................................... 17
2.9.5. Классы памяти ................................. 17
2.9.6. Операторы ..................................... 18
2. ИНТЕРАКТИВНЫЙ СТЕКОВЫЙ КАЛЬКУЛЯТОР dc ............. 20
2.1. Описание синтаксиса ............................. 20
2.2. Детальное описание .............................. 22
2.2.1. Внутреннее представление чисел ................ 22
2.2.2. Распределитель памяти ......................... 23
2.2.3. Внутренняя арифметика ......................... 24
2.2.4. Сложение и вычитание .......................... 25
2.2.5. Умножение ..................................... 25
2.2.6. Деление ....................................... 25
2.2.7. Нахождение остатка ............................ 26
2.2.8. Вычисление квадратного корня .................. 26
2.2.9. Возведение в степень .......................... 26
2.2.10. Перевод вводных чисел и входная система счисле-
ния ........................................... 26
- 31 -
2.2.11. Выводные команды .............................. 27
2.2.12. Выходной формат и выходная система счисления .. 27
2.2.13. Внутренние регистры ........................... 27
2.2.14. Стековые команды .............................. 27
2.2.15. Описания и вызовы функций ..................... 28
2.2.16. Внутренние регистры - программирование на dc .. 28
2.2.17. Стековые регистры и массивы ................... 28
2.2.18. Прочие команды ................................ 28
2.3. Выбор решений ................................... 29
- 32 -