Перейти к содержанию
    

Сплош и рядом математика

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

 

 

ЗЫ:. кстати говоря, пусть эта тема будет несколоко универсальной - пусть здесь выкладываюстся алгоритмы математических операций и функций (желательно на асме... атмеловском)...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если говорить о ЛЮБЫХ функциях, то проМММблематично...

а вообще-то обычно можно разложить в ряд, а ряд описать алгоритмически - и опять Кнут! Мафия какая-то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вариант еще можно заранее составить массив со значениями функции в отдельных точках, а потом вычислять значение этой функци в произвольной точке с помощью интерполяции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

zltigo - зачот, но к теме не относится...

 

 

Atashi, действительно...

 

LordN, я так понимаю, что сайт - это твоё детище... как говорится охайо, обязательно гляну...

 

trablik, эта мысль приходила и мне в голову, но есть несколько но - прибор у меня конечно же не прецизионный, но точность мне необходима большая, а следовательно и такихзначений будет свыше трёх тысяч.... что не то что в микрокотроллере сохранить, а вообще просчитать (бех автоматизиции есессно) сложновато...

 

всем спазибо за отклики... тема считается открытой для дальнейших обсуждений...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo - зачот, но к теме не относится...

Прилинковать библиотечную функцию что не позволяет? Хочется переплюнуть по размеру и скорости

не имея опыта в данном деле?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

trablik, эта мысль приходила и мне в голову, но есть несколько но - прибор у меня конечно же не прецизионный, но точность мне необходима большая, а следовательно и такихзначений будет свыше трёх тысяч.... что не то что в микрокотроллере сохранить, а вообще просчитать (бех автоматизиции есессно) сложновато...

по поводу необходимости более трёх тысяч значений

- не обязательно всё делать в лоб. Если вспомнить из математики формулу ln( a*b )=ln( a )+ln( b ), то задачу можно существенно упростить, раскладывая аргумент логарифма на множители.

Поясню на примере. Пусть требуется вычислить ln(123456.789).

Решение: ln(123456)=ln(10*10*10*10*10*1.23456789)= ln(10)+ln(10)+ln(10)+ln(10)+ln(10) + ln(1.23456789)=5*ln(10)+ ln(1.23456789)

Константу ln(10) монжо вычислить заранее с высокой точностью. Таким образом, для вычисления логарифма любого числа потребуется знание константы ln(10) и вычисление логарифма числа на отрезке от 1 до 10, а это гораздо проще.

Примечание. В случае чисел меньших 1 для приведения их к диапазону 1..10 нужно не прибалять, а вычитать ln(10).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo, опять зачот... но снова нето... нету библиотечной функции... я работаю в среде AVRStudio, использующий язык assembler... максиму что есть из готовых функций - это восьмиразрядное умножение...

 

trablik, мысль дельная.... обязательно её завтра обсосу... в плане обдумаю...

 

продолжаем обсуждение...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo, опять зачот... но снова нето... нету библиотечной функции... я работаю в среде AVRStudio, использующий язык assembler...

А что, объектные файлы студийный ассемблер исключительно собственного формата генерит и его линкер ничего кроме них не переваривает? Если не обе этих проблемы сразу, то можно и постороннюю прилинковать.

 

В общем слинковать через конвертер ELF можно:

 

 

Installing and using AVRGCC with AVRstudio

This is a comprehensive introduction on how to install AVRstudio and and the GNU AVR C

compiler “avr-gcc”, and making them work together. This introduction leads step by step to the

successful build of sample code, and programming of whichever AVR part you have chosen, on the

STK500 development board.

Used in this introduction:

• AVRstudio executable installer, “astudio.exe” release 3.53 of nov.8, 2001[5.9M] or later.

Downloadable from www.avrfreaks.net

• AVRGCC executable installer “avrgcc200112XXa_AVRfreaks.exe” [8.1M], AVRfreaks

distribution of dec.07, 2001 or later.

This package also contains:

• Flavio Gobber’s Elf2Coff converter. • The gcctest 1-9 files, by Volker Oth.

Downloadable from www.avrfreaks.net. It is important that you try to use our package, as it

contains all the correct additional files (.bat files, makefiles) that you need to complete this

guide).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo, мои объяснения почему и это не подходит будут настолько нелепыми (и я думаю что ты догадался почему), что я их не буду озвучивать...

 

неужели никто не владеет алгоритмом высчитывания логаифма, если не атурального, то хоть бы десятичного?....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и я думаю что ты догадался почему

Да и даже прямо написал это в одном из предыдущих постов.

 

неужели никто не владеет алгоритмом высчитывания логаифма

А собственно _алгоритм_ можете посмотреть именно в исходниках (например GCC) той самой библиотечной log() функции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может стоит разложить логарифм в ряд. Задаться точностью и решить до какого члена ряда считать.

Разложение см. http://ru.wikipedia.org/wiki/%D0%9B%D0%BE%...%BD%D0%B8%D0%B5

Внизу в замечаниях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo, я напишу тебе в личку..

 

KKN, в принципе если посидеть над этим пару дней с учебником, то что-нибудь получится, но в этом случае получится довольно грамоздкая система и время на подсчёт функции будет довольно большим (при относительно малой производительности мк). поэтому в данной задаче выбор делается в пользу быстроты. я и так пытюсь "убыстрить" этот процесс отказавшись от вещественных чисел в пользу 16-ти разрядных целочисленных....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...