Eˣ
Eˣ (е в степени икс) — традиционное слово Каллисто. Вычисление экспоненты.
Eˣ ( x −− p ) Вычисление экспоненты. p := e^x
Возводит значение числа e в степень x, возвращает p. Аргумент x должен быть меньше ln 10100≈230,2585093.
Ввод слова Eˣ[править]
В режиме ЛАТ последовательно нажмите четыре клавиши ИП P F 0
Эти нажатия оставляют клавиатуру в режиме NUM.
FEXP в стандарте ANS Forth[править]
12.6.2.1515 FEXP "f-e-x-p" FLOATING EXT ( F: r1 -- r2 ) or ( r1 -- r2 ) Возводит e в степень r1, возвращает r2.
История[править]
В Форте слово Eˣ одно из самых древних, хотя вошло в стандарт под именем FEXP лишь в 1994 году.
Впервые слово появилось в 1964 году под именем EXP в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году (Национальная ускорительная лаборатория SLAC, Стэнфордский университет). Разумеется, слово EXP в 1964 году вызывало библиотечную функцию.
Снова слово EXP появилось в Форте 1971-73 годах, когда Чак Мур перенёс транслятор на DEC PDP-11 в National Radio Astronomy Observatory (англ., Шарлотсвилл). Экспонента вычислялась по основанию 2. Функции EXP и LOG работали с фиксированной запятой — 10 бит справа от двоичной запятой.
Слово Eˣ также было в MMSFORTH и FSP88 под именем EXP
В Каллисто имя Eˣ восходит к надписи на клавиатуре советского ПМК «Электроника Б3-34», выпущенного в 1980 году.
Реализация[править]
Слово является «обёрткой» вокруг команды ЭКВМ F ex, которая вызывает переполнение при аргументе 230,2585093 и больше.
Обработка этой ошибки производится встроенной программой. Например, последовательность слов 231 eˣ вызывает аварийный останов Каллисто с сообщением «Переполнение» в строке комментариев. Можно ввести с клавиатуры произвольное число в качестве значения «e231» и вернуться в Каллисто, нажав С/П . Подробнее см. статью Авост Каллисто.
В случае аварийного останова рекомендуется произвести «холодную перезагрузку» Каллисто с удалением всех введённых слов, нажав последовательно клавиши В/О С/П .
1572 ;#FEXP 1573 ; Eˣ ( x −− p ) Экспонента. p := eˣ 1574 LEXPE: .DB 2 1575 .TEXT "E" ; ( x −− e^x ) 1576 .DB 190 ; E^X 1577 .DW LEXP10 1578 EXPE: .DW JEXPE 1579 JEXPE: PKRM03 FEXP PKM03 KGOTO9 ; Обёртка вокруг FEXP.
Реализация из SP-Forth 4.20:
\ e^(x) = 2^(x * LOG{2}e) CODE FEXP FLDL2E \ normalize FMULP ST(1), ST(0) LEA EBP, -4 [EBP] \ set rounding mode to truncate MOV [EBP], EAX FSTCW DWORD -4 [EBP] MOV EAX, -4 [EBP] AND AH, # 0F3 OR AH, # 0C MOV -8 [EBP], EAX FLDCW DWORD -8 [EBP] FLD ST(0) \ get integer and fractional parts FRNDINT FXCH ST(1) FSUB ST(0), ST(1) F2XM1 \ exponentiate fraction FLD1 FADDP ST(1), ST(0) FSCALE \ scale in integral part FXCH ST(1) \ clean up FCOMP ST(1) FLDCW DWORD -4 [EBP] MOV EAX, [EBP] LEA EBP, 4 [EBP] RET END-CODE
Ссылки[править]
- Исходный текст слова Eˣ в Каллисто Классик 1.0
- См. слова 10ˣ, Yˣ и LN
- Экспонента на Википедии
- Число e на Википедии
- Слово FEXP (f-e-x-p) в стандарте ANS Forth (англ.)
- Слово FEXP (f-e-x-p) в черновике Forth 200x (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |