Arsen Gonian – Язык программирования Форт (Forth). Решение задач по программированию. Версия 2. (страница 13)
2E B27 F. F. F.
256.00000 16.000000 4.0000000 Ok \ Порядок печати обратный
3E B27 F. F. F.
6561.0000 81.000000 9.0000000 Ok
Пример 28. Похож на предыдущую задачу и чуть посложнее.
: B28 ( A -> A^2 A^3 A^5 A^10 A^15 )
DUP DUP * \ A -> A A^2
SWAP OVER * \ A A^2 -> A^2 A^3
OVER OVER * \ A^2 A^3 -> A^2 A^3 A^5
DUP DUP * \ A^2 A^3 A^5 -> A^2 A^3 A^5 A^10
OVER OVER * \ A^2 A^3 A^5 A^10 -> A^2 A^3 A^5 A^10 A^15
;
2 B28
Ok ( 4 8 32 1024 32768 )
3 B28
Ok ( 9 27 243 59049 14348907 )
Не забывайте, что степенная функция растет очень быстро и при большом основании быстро произойдет переполнение, в результате ответ будет некорректным. Так, например, при A=10, уже 10-ая степень вычисляется неправильно.
10 B28
Ok ( 100 1000 100000 1410065408 2764472320(-1530494976) )
Для вещественного аргумента.
: B28 ( A -> A^2 A^3 A^5 A^10 A^15)
FDUP FDUP F* \ A -> A A^2
FSWAP FOVER F* \ A A^2 -> A^2 A^3
FOVER FOVER F* \ A^2 A^3 -> A^2 A^3 A^5
FDUP FDUP F* \ A^2 A^3 A^5 -> A^2 A^3 A^5 A^10
FOVER FOVER F* \ A^2 A^3 A^5 A^10 -> A^2 A^3 A^5 A^10 A^15
;
Тесты с вещественным параметром.
2E B28 F. F. F. F. F.
32768.000 1024.0000 32.000000 8.0000000 4.0000000 Ok \ опять обратный порядок при печати
3E B28 F. F. F. F. F.
14348907. 59049.000 243.00000 27.000000 9.0000000 Ok
Очевидно слова работает корректно.
Пример 29. Перевести градусы в радианы.
Целочисленный вариант будет в 100 раз больше, поэтому его код не приводится. При необходимости можно его получить из кода для вещественного аргумента. Также можете воспользоваться словом «.2»
: B29 ( A{DEG} -> X{RAD} ) \ X=A*Pi/180
314E-2 F* \ A -> 3.14*A
180E F/ \ 3.14*A -> 3.14*A/180
;
Нижеприведенные тесты корректны.
90E B29 F.
1.5700000 Ok
360E B29 F.
6.2800000 Ok
Для повышения точности, самостоятельно перепишите слово «B29» используя слово «FPI».
Пример 30. Обратная к предыдущему задача перевода из радиан в градусы.
: B30 ( A{RAD} -> X{DEG} ) \ 180*A/Pi
180E F* \ A -> 180*A
314E-2 F/ \ 180*A -> 180*A/Pi
;
Тесты слова B30.
314E-2 B30 F.
180.00000 Ok
628E-2 B30 F.
360.00000 Ok
Как и в предыдущем случае, перепишите для увеличения точности.
Если вы планируете использовать последние два слова в своей работе, то можно их назвать по практичнее и добавить в свой файл Форт-расширения (или в свою математическую библиотеку).
Например, RAD>DEG и DEG>RAD (знак «>» означает перевести, перенести в зависимости от контекста использования).
Пример содержания такого файла:
\ Подключение библиотеки для работы с вещественными числами