Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте или
создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Правка может быть отменена.
Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия |
Ваш текст |
Строка 40: |
Строка 40: |
| 1578 EXPE: .DW JEXPE | | 1578 EXPE: .DW JEXPE |
| 1579 JEXPE: PKRM03 FEXP PKM03 KGOTO9 ; Обёртка вокруг FEXP. | | 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> | | </pre> |
|
| |
|