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

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

18

…………………………………………………………

0019EFB4 : 0056BC66 (INIT)

END OF EXCEPTION REPORT

S" 0E >FLOAT DROP B25 F.

^ 0xC0000090L FLOAT_INVALID_OPERATION

рис 41

Но во второй раз у меня выдал другой ответ (разумеется уже некорректный):

0E B25 F.

infinity Ok

После этого лучше перезапустить систему и заново подключить библиотеки работы с вещественными числами или воспользоваться знакомым словом «FINIT», иначе он их не распознает:

1E B25 F.

1E B25 F.

^ -2003 WORD OR FILE NOT FOUND

0E B25 F.

0E B25 F.

^ -2003 WORD OR FILE NOT FOUND

1E-3 B25 F.

1E-3 B25 F.

^ -2003 WORD OR FILE NOT FOUND

После замены кода «F**2» на «FDUP F*» и «3E F**» на «FDUP FDUP F* F*» проблема исчезает.

: B25 ( X -> F[X] )             \ F(X)=3*X^6-6*x^2-7

FDUP F*             \ X -> X^2

FDUP -6E F*             \ X^2 -> X^2 -6*X^2

–7E F+                   \ X^2 {-6*X^2} -> X^2 {-6*X^2-7}

FSWAP                   \ X^2 {-6*X^2-7} -> {-6*X^2-7} X^2

FDUP FDUP F* F*       \ {-6*X^2-7} X^2 -> {-6*X^2-7} {X^2}^3=X^6

3E F* F+             \ {-6*X^2-7}+{3*X^6}

;

0E B25 F.

–7.0000000 Ok

Если ваша функция предполагает вычисление в нуле, не пользуйтесь функциями возведения в степень, используйте многократное умножение.

Пример 26. Брат близнец предыдущего. Разница в формуле. Так же рассмотрим только вещественный аргумент.

: B26 ( X -> F[X] )       \ F[X]=4*{X-3}^6-7*{X-3}^3+2

3E F-             \ X -> X-3

3E F**             \ X-3 -> (X-3)^3

FDUP -7E F*       \ (X-3)^3 -> (X-3)^3 {-7*(X-3)^3}

FSWAP F**2       \ (X-3)^3 {-7*(X-3)^3} -> {-7*(X-3)^3} [(X-3)^3]^2

4E F*             \ {-7*(X-3)^3} (X-3)^6 -> {-7*(X-3)^3} 4*(X-3)^6

2E F+ F+       \ {-7*(X-3)^3} 4*(X-3)^6 -> {-7*(X-3)^3}+4*(X-3)^6+2

;

4E B26 F.

–1.0000000 Ok

3E B26 F.

2.0000000 Ok

Здесь ошибки пи возведении нуля в степень не выдал, но при вводе кода «0E 3E F** F.» по-прежнему выдает ошибку. Будьте осторожны с возведением в степень, это опасная операция, вызывающая много ошибок.

Не привожу скана с тестом примера 26, разберите самостоятельно.

Пример 27. В Форте дополнительная переменная здесь и не понадобится. Для тех, кто любит все выполнять строго по инструкции – задание самостоятельно переписать код.

: B27 ( A -> A^2 A^4 A^8)

DUP *             \ A -> A^2

DUP DUP *       \ A^2 -> A^2 A^4

DUP DUP *       \ A^2 A^4 -> A^2 A^4 A^8

;

Примеры работы слова:

2 B27

Ok ( 4 16 256 )

3 B27

Ok ( 9 81 6561 )

Без комментариев.

рис 42

С вещественным аргументом задача ничуть не сложнее. Заменяем все операторы на соответствующие, просто добавив «F».

: B27 ( A -> A^2 A^4 A^8 )

FDUP F*       \ A -> A^2

FDUP FDUP F*       \ A^2 -> A^2 A^4

FDUP FDUP F*       \ A^2 A^4 -> A^2 A^4 A^8

;