Контрольная работа: Дополнительные арифметические команды
←ST(1)
←ST(0)
|
|
|
|
Команда FYL2X вычисляет функцию: ST(1) * log2 ST(0). Два операнда извлекаются из стека, а затем результат включается в стек. Поэтому УКАЗАТЕЛЬ СТЕКА УВЕЛИЧИТСЯ НА 1. В команде требуется удовлетворение естественного для логарифмической функции условия:
ST(0) > 0.
Значения других логарифмических функций вычисляются по формулам в табл. 5 с загрузкой в регистр ST(1) необходимых констант командами: FLDLN2 и FLDLG2.
Таблица 5 - Формулы для вычисления логарифмических функций
log2 (x) ® FLD1; FLD x; FYL2X; ln (x) = ln (2) * log2 (x) ® FLDLN2; FLD x; FYL2X; lg (x) = lg (2) * log2 (x) ® FLDLG2; FLD x; FYL2X. |
Еще одна логарифмическая команда FYL2XP1 вычисляет функцию: ST(1) * log2 (ST(0) + 1). Причина появления этой команды заключается в получении более высокой точности вычисления функции: log(1 + x). Эта функция часто встречается в финансовых расчетах, а также при вычислении обратных гиперболических функций.
Команда показательной функции F2XM1 вычисляет:
F2XM1 [ST(0)] = 2(ST(0)) – 1.
Аргумент показательной функции должен находится в диапазоне: для сопроцессоров 87/287: 0 <= ST(0) <= 0.5;
для сопроцессоров 387+: –1 <= ST(0) <= +1.
Вычисление функции 2х – 1 вместо функции 2х позволяет избежать потери точности, когда аргумент «х» близок к 0 (а значение функции 2х близко к 1). Остальные показательные функции вычисляются по формулам в табл. 6.
Таблица 6 – Формулы для вычисления показательных функций
2x = [2x – 1] + 1 = F2XM1 (x) + 1; ex = 1 + [2(x * log2(e)) – 1] = 1 + F2XM1 (x * log2 (e)); 10x = 1 + [2(x * log2(10)) – 1] = 1 + F2XM1 (x * log2 (10)); аx = 1 + [2(x * log2( а )) – 1] = 1 + F2XM1 (x * log2 (a)). |
Таблица 7 – Формулы для вычисления гиперболических функций
Cинус гиперболический | |
Косинус гиперболический | |
Тангенс гиперболический | |
Котангенс гиперболический | |
Косеканс гиперболический | |
Секанс гиперболический |