[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
миниатюрный аудио-видеорекордер mAVR

Отправлено ВН 03 июля 2002 г. 15:28
В ответ на: Помогите, как реализовать функцию ln(x) на 2313.Спасибо. отправлено cv 03 июля 2002 г. 08:57

ln можно вычислить довольно просто и точно, если использовать 2 обстоятельства.
1. Любое число можно представить в виде X=M*2^P. M - нормализованная
и точная мантисса. P - порядок. M = от 0.5 до 1-2^(-(N-1)). N - разрядность исходных данных, или, для плавающих чисел, разрядность мантиссы с учетом скрытого и знакового разрядов.
2. ln(1+dx)=dx-dx^2/2+dx^3/3-dx^4/4+...
Из пункта 1: ln(X)=ln(M)+P*ln(2). ln(2)-константа. ln(M) можно вычислить, воспользовавшись разложением в ряд:
ln(M)=Y+Y^2/2+Y^3/3+.... Y=(M-1)/M.
Можно по другому -
для представления мантиссы использовать не все N разрядов, а меньшее число K. Тогда M=Mu+dM. Mu - усеченное до K разрядов значение мантиссы. dM - разница между точным и усеченным значениями мантиссы. dM представляется R разрядами и R=N-K. Тогда ln(M)=ln(Mu+dM)=
ln(Mu*(1+dM/Mu))=ln(Mu)+ln(1+dM/Mu).
ln(Mu) можно взять из таблицы. Поскольку мантисса нормализованная, то таблица может состоять из 2^(K-1) элементов.
А для вычисления ln(1+dM/Mu) воспользоваться пунктом 2. Причем макс. величина dM/Mu~2^R/2^(R+K-2)=2^(-(K-2)).
Ошибка определяется первым отброшенным членом разложения.
Так при K=9 и однопроцентной точности ничего вообще не надо раскладывать. K=8 достаточно одного члена разложения. K=5 - 2-х, K=4 - 4-х.
Конечно нужна проверка на X=0.
Как из исходного числа получить порядок и мантиссу наверное знаете.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru