Arsen Gonian – Язык программирования Форт (Forth). Решение задач по программированию. Версия 2. (страница 12)
…………………………………………………………
0019EFB4 : 0056BC66 (INIT)
END OF EXCEPTION REPORT
S" 0E >FLOAT DROP B25 F.
^ 0xC0000090L FLOAT_INVALID_OPERATION
Но во второй раз у меня выдал другой ответ (разумеется уже некорректный):
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 )
Без комментариев.
С вещественным аргументом задача ничуть не сложнее. Заменяем все операторы на соответствующие, просто добавив «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
;