Eˣ: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показаны 32 промежуточные версии этого же участника)
Строка 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ˣ ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] &nbsp; [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша 0|{{Серая клавиша|0}}]]


Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме NUM]].


== FEXP в стандарте ANS Forth ==
== FEXP в стандарте ANS Forth ==
Строка 9: Строка 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&#739;              ( x −− p )                          Экспонента. p := e&#739;
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>


== Ссылки ==
== Ссылки ==
* [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.2.1515 Слово FEXP (f-e-x-p) в стандарте ANS Forth] ''(англ.)''
* {{Исходник|FEXP|Eˣ}}
* [http://www.forth200x.org/documents/html/float.html#floating:FEXP Слово FEXP (f-e-x-p) в черновике Forth 200x] ''(англ.)''
* См. слова [[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/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 FEXP (f-e-x-p)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/float/FEXP FEXP (f-e-x-p)] в черновике Forth 200x ''(англ.)''




{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Математические функции Каллисто]]
[[Категория:Математические функции Каллисто]]
[[Категория:Одноместные операции Каллисто]]
[[Категория:Одноместные операции Каллисто]]
[[Категория:Слова, способные вызывать авост Каллисто]]
[[Категория:Адаптированные слова]]
[[Категория:Традиционные слова]]

Текущая версия от 17:43, 10 ноября 2017

(е в степени икс) — традиционное слово Каллисто. Вычисление экспоненты.

Eˣ             ( x −− p )                           Вычисление экспоненты. p := e^x
Пример работы слова Eˣ

Возводит значение числа 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

Ссылки[править]


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.