Eˣ: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показано 25 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''Eˣ''' — | '''Eˣ''' (е в степени икс) — традиционное слово [[Каллисто]]. Вычисление экспоненты. | ||
( | Eˣ ( x −− p ) Вычисление экспоненты. p := e^x | ||
[[Файл:CallistoValue.png|thumb|right|264px|Пример работы слова Eˣ]] | |||
Возводит значение числа e в степень x, возвращает p. Аргумент x должен быть меньше ln 10<sup>100</sup>≈230,2585093. | |||
== Ввод слова Eˣ == | |||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша 0|{{Серая клавиша|0}}]] | |||
Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме NUM]]. | |||
== FEXP в стандарте ANS Forth == | == FEXP в стандарте ANS Forth == | ||
Строка 16: | Строка 14: | ||
Возводит e в степень r1, возвращает r2. | Возводит e в степень r1, возвращает r2. | ||
== История == | |||
В Форте слово Eˣ одно из самых древних, хотя вошло в стандарт под именем FEXP лишь в 1994 году. | |||
Впервые слово появилось в 1964 году под именем EXP в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году ([https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F_SLAC Национальная ускорительная лаборатория SLAC], [https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%8D%D0%BD%D1%84%D0%BE%D1%80%D0%B4%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82 Стэнфордский университет]). Разумеется, слово EXP в 1964 году вызывало библиотечную функцию. | |||
Снова слово EXP появилось в Форте 1971-73 годах, когда Чак Мур перенёс транслятор на DEC PDP-11 в [https://en.wikipedia.org/wiki/National_Radio_Astronomy_Observatory National Radio Astronomy Observatory] (''англ.'', [https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D1%80%D0%BB%D0%BE%D1%82%D1%81%D0%B2%D0%B8%D0%BB%D0%BB_%28%D0%92%D0%B8%D1%80%D0%B3%D0%B8%D0%BD%D0%B8%D1%8F%29 Шарлотсвилл]). Экспонента вычислялась по основанию 2. Функции EXP и LOG работали с фиксированной запятой — 10 бит справа от двоичной запятой. | |||
Слово Eˣ также было в MMSFORTH и FSP88 под именем EXP | |||
В [[Каллисто]] имя Eˣ восходит к надписи на клавиатуре советского ПМК [[«Электроника Б3-34»]], выпущенного в 1980 году. | |||
== Реализация == | |||
Слово является «обёрткой» вокруг команды ЭКВМ [[F EXP|F e<sup>x</sup>]], которая вызывает переполнение при аргументе 230,2585093 и больше. | |||
Обработка этой ошибки производится [[Встроенная программа|встроенной программой]]. Например, последовательность слов {{Текст на индикаторе|231 eˣ}} вызывает [[аварийный останов]] [[Каллисто]] с сообщением «Переполнение» в [[Строка комментариев|строке комментариев]]. Можно ввести с клавиатуры произвольное число в качестве значения «e<sup>231</sup>» и вернуться в [[Каллисто]], нажав [[Клавиша С/П|{{Чёрная клавиша|С/П}}]]. Подробнее см. статью [[Авост Каллисто]]. | |||
= | В случае [[Авост Каллисто|аварийного останова]] рекомендуется произвести [[COLD|«холодную перезагрузку»]] [[Каллисто]] с удалением всех введённых слов, нажав последовательно клавиши [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша С/П|{{Чёрная клавиша|С/П}}]]. | ||
<pre> | |||
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. | |||
</pre> | |||
Реализация из SP-Forth 4.20: | |||
<pre> | |||
\ 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 | |||
</pre> | |||
== Ссылки == | == Ссылки == | ||
* См. слова [[ | * {{Исходник|FEXP|Eˣ}} | ||
* См. слова [[10ˣ]], [[Yˣ]] и [[LN]] | |||
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0 Экспонента на Википедии] | * [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0 Экспонента на Википедии] | ||
* [http://ru.wikipedia.org/wiki/E_%28%D1%87%D0%B8%D1%81%D0%BB%D0%BE%29 Число e на Википедии] | * [http://ru.wikipedia.org/wiki/E_%28%D1%87%D0%B8%D1%81%D0%BB%D0%BE%29 Число e на Википедии] | ||
* [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.2.1515 | * Слово [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.2.1515 FEXP (f-e-x-p)] в стандарте ANS Forth ''(англ.)'' | ||
* [http:// | * Слово [http://forth-standard.org/standard/float/FEXP FEXP (f-e-x-p)] в черновике Forth 200x ''(англ.)'' | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Примитивы]] | |||
[[Категория:Математические функции Каллисто]] | [[Категория:Математические функции Каллисто]] | ||
[[Категория:Одноместные операции Каллисто]] | [[Категория:Одноместные операции Каллисто]] | ||
[[Категория:Слова, способные вызывать авост Каллисто]] | [[Категория:Слова, способные вызывать авост Каллисто]] | ||
[[Категория:Адаптированные слова]] | |||
[[Категория:Традиционные слова]] |
Текущая версия от 17:43, 10 ноября 2017
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 (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |