Показано с 1 по 10 из 85

Тема: Логарифм макрос

Древовидный режим

Ukeru Логарифм макрос 30.05.2016, 13:44
Владимир Ситников Аккуратнее нужно быть в... 30.05.2016, 21:46
MriduVaju А я очень аккуратен в... 31.05.2016, 06:22
Алексей Геннадьевич Логарифмическая линейка? нет,... 31.05.2016, 08:53
Владимир Ситников Уважаемый, вы как проводите... 01.06.2016, 09:48
Мордорец Оно будет дороже. 01.06.2016, 11:56
Владимир Ситников ПР станет дороже от того, что... 01.06.2016, 13:37
Владимир Ситников Вот это типичный пример... 04.06.2016, 16:14
Владимир Ситников Студентов и школьников учат... 04.06.2016, 17:35
MriduVaju Я конечно понимаю, что... 05.06.2016, 11:14
AI! http://www.owen.ru/forum/showt... 05.06.2016, 14:16
MriduVaju Тишина... Видимо у всех... 09.06.2016, 13:35
Владимир Ситников А давайте я вопрос задам?... 09.06.2016, 13:52
Владимир Ситников О, здорово. Я правильно... 12.06.2016, 22:13
Владимир Ситников Это понятно. Я про то, что... 13.06.2016, 00:07
Владимир Ситников CD32 выдаёт "оценку логарифма... 13.06.2016, 11:06
Владимир Ситников Да прибавить 0.5 ко второму... 13.06.2016, 14:59
Владимир Ситников А смысл возвращать третью... 13.06.2016, 12:51
Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #30

    По умолчанию

    Цитата Сообщение от AI! Посмотреть сообщение
    Подумал...
    В новой версии всё так же как и в первой, т.е. работает мгновенно, во всех допустимых значениях от 0 до 3,4E+38, и точность до 1/256.
    Основное отличие - за счёт использования только CD32 получается всего 3 итерации (развёрнутых в линию, отсюда и мгновенность),
    вместо 11 в первой публичной версии макроса (или 15, если бы CD32 вообще не использовался)

    PS напомню: lb(x) - Двоичный логарифм
    ln(x)=lb(x)/lb(e)=ln(2)*lb(x) = 0,693147*lb(x)
    lg(x)=lb(x)/lb(10)=lg(2)*lb(x) = 0,30103*lb(x)
    О, здорово. Я правильно понимаю, что последней CD32(POW(x, 256))/256 цепочке на вход всегда подаются данные в диапазоне 0,9...1,1?

    Тогда можно повысить точность до 1.4e-4 == 1/6900, если использовать приближение lb(x) = 2*(x-1)/(x+1) / ln(2) вместо последней цепочки CD(POW)
    Если взять ещё один член 2*((x-1)/(x+1) + ((x-1)/(x+1))3/3) / ln(2), то точность будет почти до 1e-7.

    Вот пример такого (! на картинке два члена ряда не встроены в исходную формулу специально, чтобы сравнивать): lb2_3.png

    lb(1.01) == 0.014355292977070055
    Вариант с тремя CD32 выдаёт 1.2e-2

    Если заменить последний CD32 на ряд (из двух элементов), то получится точный ответ:
    Код:
    irb(main):009:0> x=1.01
    => 1.01
    irb(main):010:0> y=(x-1)/(x+1)
    => 0.004975124378109458
    irb(main):012:0> Math.log(1.01, 2)
    => 0.014355292977070055
    irb(main):013:0> 2*(y+y**3/3)/Math.log(2)
    => 0.014355292975311074
    Отсюда вывод: если на последнюю цепочку подаваемые значения невелики (близки к 1), то нужно заменять её на 2*(y+y**3/3)/Math.log(2)
    Последний раз редактировалось Владимир Ситников; 12.06.2016 в 23:42.

Похожие темы

  1. Макрос внутри макроса ?
    от iman в разделе Программируемые реле
    Ответов: 3
    Последнее сообщение: 03.10.2015, 20:49
  2. Макрос побитного вывода сигнатуры (beeper)
    от tigdin в разделе Программируемые реле
    Ответов: 25
    Последнее сообщение: 12.04.2015, 20:35
  3. Макрос в макросе
    от АлексPetr в разделе Программируемые реле
    Ответов: 4
    Последнее сообщение: 28.01.2015, 21:16
  4. Ответов: 12
    Последнее сообщение: 18.11.2014, 12:14
  5. Макрос
    от CEkip в разделе Программируемые реле
    Ответов: 11
    Последнее сообщение: 13.04.2012, 20:54

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •