Снимаю шляпу. Без шуток. На этом форуме мало кто может согласиться с тем, что ошибся.
И да и нет.
Смысл вопроса был простой: если реализован алгоритм с wikipedia, то можно открыть статью, открыть программу, и сравнить.
Если алгоритм самопальный, то его, к сожалению, не сравнишь "с оригиналом".
Не исключено, что в алгоритме могут быть скрытые дефекты. Т.е. для каких-нибудь особенных входных значений погрешность может оказаться выше заявленной.
"абсолютная погрешность не превышает 1/256 для всех входных значений".
Это ок. Я это услышал.
Я говорю про то, что слова про погрешность и диапазон значений должны звучать сразу.
ОДЗ ПР уже не так важно. В конце концов, открываем справку по ОЛ и там наверняка будет.
Что именно выдаст макрос на 0, конечно, тоже важно, но, блин, посмотрел бы я на того, кто реально пытается log(0) вычислять.
Я конечно понимаю, что главное чтобы работало, но я лично не могу использовать в своих проектах запутанные, как клубок проводов, макросы. Вот, посидел, переделал макрос от AI.
это первый мой макрос в новом интерфейсе... не освоил я его ещё...
PS мой RND1024 видели?
начинающий профессионал
нет, не видел. дадите ссылку посмотрю))
начинающий профессионал
Вторая версия макроса "Двоичный логарифм", с использованием цикла, но и более точным ответом.
На этот раз мгновенный ответ с точностью до 0.5, повышая точность с каждым тактом ПР на один двоичный разряд
(точность 1/2ⁿ, где n-номер такта после изменения начального значения)
PS на 20ом такте достигается максимально возможная точность (1/2^20 ~ 1/10^6)
PPS по просьбам читателей, все связи в схеме абсолютно читаемы... (простите за тавтологию)
Последний раз редактировалось AI!; 07.06.2016 в 22:47.
начинающий профессионал
Тишина... Видимо у всех просто нет слов Да уж, дружище, твоему усердию можно только позавидовать.
А давайте я вопрос задам?
Почему первые биты определяются пачками (через CD32), а остальные по одному?
В чём смысл получения битов по одному, если есть логарифмирующий блок?
Разе не получается вообще все биты через CD32 получать?
Образно: получили первые 32, поделили на 2CD32, умножили на 232, снова вызываем CD32.
И не придётся ждать 20 тактов.