18+
реклама
18+
Бургер менюБургер меню

Arsen Gonian – Язык программирования Форт (Forth). Решение задач по программированию. Версия 2. (страница 13)

18

2E B27 F. F. F.

256.00000 16.000000 4.0000000 Ok      \ Порядок печати обратный

3E B27 F. F. F.

6561.0000 81.000000 9.0000000 Ok

рис 43

Пример 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

;

рис 44

рис 45

Тесты с вещественным параметром.

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».

рис 46

Пример 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

рис 47

Как и в предыдущем случае, перепишите для увеличения точности.

Если вы планируете использовать последние два слова в своей работе, то можно их назвать по практичнее и добавить в свой файл Форт-расширения (или в свою математическую библиотеку).

Например, RAD>DEG и DEG>RAD (знак «>» означает перевести, перенести в зависимости от контекста использования).

Пример содержания такого файла:

\ Подключение библиотеки для работы с вещественными числами