реклама на сайте
подробности

 
 
> Сплош и рядом математика, помогите кто чем может
UniBomb
сообщение Jul 8 2006, 17:22
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 148
Регистрация: 26-05-05
Пользователь №: 5 416



Я наверно, как впрочем и все, наткнулся на вопрос реализации математических функций в мк. Так вот, в данный момент мне позарез нужно вычислять натуральный логарифм шестнадцатиразрядного числа. Если у кого есть наработки, то прошу поделиться...


ЗЫ:. кстати говоря, пусть эта тема будет несколоко универсальной - пусть здесь выкладываюстся алгоритмы математических операций и функций (желательно на асме... атмеловском)...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vladv
сообщение Jul 10 2006, 19:43
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 7-06-06
Пользователь №: 17 825



Если не жалко держать таблицу из 256 значений, то можно так.
Для определенности будем считать, что в вычислении ln(x), x это 16-бит целое число.
(если х - дробное с фиксированной точкой, то результат просто смещается на -N*ln(2),
где N - кол-во дробных бит)

1. Сдвигаем x влево до первой значащей единицы:
X = x << K //К - число старших нулей//
и вычисляем:
Y1 = -K*ln(2)

2. Представляем:
X = 256*A+B //т.е. A и B - старший и младший байты числа X//

3. Ищем по таблице:
Y2 = TAB(A)
где:
TAB(A) = 8*ln(2)*ln(A) - таблица из 256 заранее расчитанных значений (здесь же можно
учесть -N*ln(2) для дробного x: TAB(A) = 8*ln(2)*ln(A)-N*ln(2) )

4. Вычисляем:
Y3 = B/A

5. Собираем результат:
ln(x) = Y1 + Y2 + Y3/256


"Теория метода":
ln(x) = ln(X * 2**(-K)) = -K*ln(2) + ln(X) = Y1 + ln(X)
ln(X) = ln(256*A+cool.gif = ln(256*A) + ln(1+B/(256*A)) = 8*ln(2)*ln(A) + ln(1+B/(256*A)) =
= Y2 + ln(1+B/(256*A))
ln(1+B/(256*A)) ~ B/(256*A) = Y3/256 //с точностью не хуже 14 дробных бит!!!//

Тут есть относительно трудоемкая операция B/А, но (если не ошибаюсь) например для
вычисления 16-бит значения ln(x) при целом 16-бит x достаточно знать 4 старших бита B/A.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- UniBomb   Сплош и рядом математика   Jul 8 2006, 17:22
- - Yura_K   А может просто глянуть Кнута?   Jul 8 2006, 18:11
|- - zltigo   Цитата(Yura_K @ Jul 8 2006, 21:11) А може...   Jul 8 2006, 18:53
- - Atashi   если говорить о ЛЮБЫХ функциях, то проМММблематичн...   Jul 8 2006, 19:45
- - LordN   неплохие примеры разных вычислений есть тут http:/...   Jul 9 2006, 06:55
|- - trablik   Как вариант еще можно заранее составить массив со ...   Jul 9 2006, 15:15
- - UniBomb   по повду кнута - чего то я часто вижу этого автора...   Jul 9 2006, 18:28
|- - zltigo   Цитата(UniBomb @ Jul 9 2006, 21:28) zltig...   Jul 9 2006, 18:42
|- - trablik   Цитата(UniBomb @ Jul 9 2006, 22:28) trabl...   Jul 9 2006, 20:16
- - UniBomb   zltigo, опять зачот... но снова нето... нету библи...   Jul 9 2006, 20:27
|- - zltigo   Цитата(UniBomb @ Jul 9 2006, 23:27) zltig...   Jul 9 2006, 21:39
- - UniBomb   zltigo, мои объяснения почему и это не подходит бу...   Jul 10 2006, 12:39
|- - zltigo   Цитата(UniBomb @ Jul 10 2006, 15:39) и я ...   Jul 10 2006, 13:11
- - KKN   Может стоит разложить логарифм в ряд. Задаться точ...   Jul 10 2006, 13:25
- - UniBomb   zltigo, я напишу тебе в личку.. KKN, в принципе е...   Jul 10 2006, 18:44
- - UniBomb   vladv, надо будет запомнить, спасибо.... правда па...   Jul 11 2006, 16:02
|- - vladv   Цитата(UniBomb @ Jul 11 2006, 20:02) vlad...   Jul 12 2006, 18:11
- - Yura_K   Насчет ссылок по Д. Кнуту: Том 1. Основные алгорит...   Jul 12 2006, 19:42
- - CD_Eater   Способ, который описал vladv, фактически оптимизир...   Jul 15 2006, 11:55


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2025 - 04:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016