PDA

Просмотр полной версии : Логарифм макрос



Ukeru
30.05.2016, 13:44
Добрый день,
Кто нибудь делал макрос вычисления логарифма? Все перерыл нихде нет.. Поделитесь плиз..

rovki
30.05.2016, 14:47
А основание то какое ?

Woolfy
30.05.2016, 18:57
А давайте на все сразу! Халява, плиз!..;)

rovki
30.05.2016, 19:25
А давайте на все сразу! Халява, плиз!..;)

Ан нету ;) ,надо делать...

MriduVaju
30.05.2016, 20:34
А давайте на все сразу! Халява, плиз!..;)

А я советую разобраться и сделать самому, это не вероятно полезный скил. Однажды разобравшись ты сможешь делать не только логарифмы, но и всю тригонометрию и вообще любые функции на любом языке программирования, и в ФБ, и вообще на чём угодно. Как пошутил мой старший коллега - а сделай ка мне синус на релюшках)))

rovki
30.05.2016, 20:59
Как пошутил мой старший коллега - а сделай ка мне синус на релюшках))) ,а я делал синус в таблице (макрос ППЗУ) ,когда не было вещественной арифметике в ПР :D

Владимир Ситников
30.05.2016, 21:46
А я советую разобраться и сделать самому, это не вероятно полезный скил. Однажды разобравшись ты сможешь делать не только логарифмы, но и всю тригонометрию и вообще любые функции на любом языке программирования, и в ФБ, и вообще на чём угодно. Как пошутил мой старший коллега - а сделай ка мне синус на релюшках)))

Аккуратнее нужно быть в подобных высказываниях.
С таким же успехом можно сказать "криптография и шифрование это просто. Однажды разобравшись сможешь сделать не только шифрование, но и цифровую подпись".
Надеюсь, не нужно рассказывать почему нельзя в своих проектах самостоятельно реализовывать криптографию/шифрование?


В плане "приближенного вычисления логарифма" тут классический треугольник: точность результата, скорость работы, диапазон принимаемых значений; "выберете любые два".

Кому-то логарифм нужен в интервале 1..2, а кому-то 1000..20000.
Одной и той же формулой это не накроешь.

Вернее, подход из "A New Method for Approximating Logarithms with kth Order" зачётный, но неподготовленного читателя накроет.

https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B0%D1%80%D0%B8%D1%84%D0%BC#c ite_ref-13
http://elib.mi.sanu.ac.rs/files/journals/tm/22/tm1212.pdf
https://www.siam.org/students/siuro/vol7/S01325.pdf
и т.п.

В ОЛ есть 3 общеизвестных косяка на счёт подобных "вычислительных" задач:
1) Нельзя формулу записать формулой (http://www.owen.ru/forum/showthread.php?t=23707)
2) Нет циклов. Многие формулы проще записать циклом. Да, он будет на 2-5 итераций, но это гораздо ближе к математической форме записи, и гораздо проще "сравнить с оригиналом"
3) Нет возможности делать тесты (http://www.owen.ru/forum/showthread.php?t=23740&page=27&p=205320&viewfull=1#post205320). Ну реализует товарищ (или rovki, не важно) макрос логарифма. Кто проверит, что макрос реально выдаёт правильные значения?
По-хорошему, на этот макрос нужно подать набор тестовых данных и проверить, что на выходе получаются верные значения.
Задача минимум -- проверить в симуляторе. Задача максимум -- в железе. Сейчас в OL нет возможности делать автоматизированные тесты, и запросто может оказаться, что на каких-нибудь особенных входных данных логарифм будет ересь показывать (например, в одном из членов ряда перепутается знак).

Думаю, года через 2-3 можно будет сказать "а когда-то формулы приходилось квадратиками рисовать и тестировать вручную в симуляторе".

rovki
30.05.2016, 23:21
Думаю, года через 2-3 можно будет сказать "а когда-то формулы приходилось квадратиками рисовать и тестировать вручную в симуляторе".
Не дождетесь ...
1.-нет и не надо
2.есть циклы Пр ,которые можно использовать для итераций .
3.тесты есть ,надо только уметь готовить ,это же не тестирование ПИД регулятора с симуляцией обьекта регулирования в реальном времени .
И хватит уже ОЛ хаить :mad: не используя его.

Woolfy
31.05.2016, 06:10
А я советую разобраться и сделать самому, это не вероятно полезный скил.Это была шутка юмора. С вами согласен. Топикстартеру - программируемые реле по определению ограничены в вычислительной мощности. Хотите точную математику - используйте ПЛК.

MriduVaju
31.05.2016, 06:22
Аккуратнее нужно быть в подобных высказываниях.
С таким же успехом можно сказать "криптография и шифрование это просто. Однажды разобравшись сможешь сделать не только шифрование, но и цифровую подпись".


А я очень аккуратен в высказываниях))
Если говорю, что ряды Тейлора-Маклорена и метода Ньютона доступен для понимания любому школьнику, то значит что я их освоил и было не сложно, а скорее увлекательно, как решение головоломки. Я очень рекомендую каждому, кто ещё не умеет, освоить эту область. У меня ушла неделя личного времени после работы, чтобы научиться и реализовать синусы, косинусы и арксинус, аркосинус. И теперь у меня есть полноценный автомат включения света по вычисленному времени восхода-заката для любой географической точки:D

Ukeru
31.05.2016, 06:40
А основание то какое ?

натуральный логарифм

Алексей Геннадьевич
31.05.2016, 08:53
В плане "приближенного вычисления логарифма" тут классический треугольник: точность результата, скорость работы, диапазон принимаемых значений; "выберете любые два".

Кому-то логарифм нужен в интервале 1..2, а кому-то 1000..20000.
Одной и той же формулой это не накроешь.
Логарифмическая линейка? нет, не слышали.


В ОЛ есть 3 общеизвестных косяка на счёт подобных "вычислительных" задач:
1) купить машину и предъявлять претензии что она сено не ест.
2) см.п1
3) танцор и его яйца. (ещё соответствующий комикс про дилберта с дефектным тестом и нерабочим поделием :D
:cool:)

Владимир Ситников
31.05.2016, 09:05
Не дождетесь ...
1.-нет и не надо
2.есть циклы Пр ,которые можно использовать для итераций .
И хватит уже ОЛ хаить :mad: не используя его.
Ваше мнение меня не интересует. Технический прогресс не остановить, и то что сейчас вы считаете "вообще никому ненужным" через год-два-три станет в порядке вещей.


3.тесты есть ,надо только уметь готовить ,это же не тестирование ПИД регулятора с симуляцией обьекта регулирования в реальном времени .
И хватит уже ОЛ хаить не используя его.
Это называется "не читал но осуждаю". Вот вы почитайте сообщение, на которое я дал ссылку в пункте 3. Там Евстигнеев Максим (не мне вам рассказывать кто это такой) говорит, что "внутри у ОВЕНа" механизм автоматического тестирования используется. Придёт время -- сделают механизм доступным публике.

Автоматических тестов, которые могут использоваться за пределами ОВЕН, в ОЛ нет.

Владимир Ситников
31.05.2016, 09:13
Логарифмическая линейка? нет, не слышали
А вы слышали про логарифмическую?
У неё шкала весьма ограничена, и чтобы вычислить LN(20000) нужно пользоваться чем-то вида LN(20000) = LN(2*10000) = LN(2) + 4*LN(10)
Так что ваш пример лишь подтверждает мои слова.


3) танцор и его яйца.
Я привёл ссылку на сообщение Максима. Вы пишете "танцор и его яйца". Зачем так про него?

rovki
31.05.2016, 09:27
А я очень аккуратен в высказываниях))
Если говорю, что ряды Тейлора-Маклорена и метода Ньютона доступен для понимания любому школьнику, то значит что я их освоил и было не сложно, а скорее увлекательно, как решение головоломки. Я очень рекомендую каждому, кто ещё не умеет, освоить эту область. У меня ушла неделя личного времени после работы, чтобы научиться и реализовать синусы, косинусы и арксинус, аркосинус. И теперь у меня есть полноценный автомат включения света по вычисленному времени восхода-заката для любой географической точки:D
У Вас есть и замечу без формул ,а у vladimirisitnikovа нет ;),только бла ,бла.

Владимир Ситников
31.05.2016, 09:28
А я очень аккуратен в высказываниях))
Не надо советовать Тейлора там, где он заведомо неприменим. Это натуральная медвежья услуга.


Если говорю, что ряды Тейлора-Маклорена и метода Ньютона доступен для понимания любому школьнику, то значит что я их освоил и было не сложно, а скорее увлекательно, как решение головоломки. Я очень рекомендую каждому, кто ещё не умеет, освоить эту область. У меня ушла неделя личного времени после работы, чтобы научиться и реализовать синусы, косинусы и арксинус, аркосинус. И теперь у меня есть полноценный автомат включения света по вычисленному времени восхода-заката для любой географической точки:D

Берём ряд Тейлора для ln(1+x):
24657

Даже 8 членов ряда при двойной точности вычисления кое-как сходятся в интервале -0.7...0.7
Смотрим wikipedia и видим там, о чудо, то же самое:

Формула ряда 1 непригодна для практического расчёта логарифмов из-за того, что ряд сходится очень медленно и только в узком интервале

В ПР точность будет явно меньше -- там не double, а single precision.

Поэтому ряд Тейлора на "поигаться", конечно, можно, но именно он для задачи вычисления логарифма смысла не имеет.
В реальности может более правильным/быстрым/достаточно точным оказаться вообще табличное вычисление.
Т.е. забить в программу несколько опорных точек из нужного диапазона и линейно интерполировать между ними. Никаких рядов и просто кучка "if (1 < x < 10) {...}"

rovki
31.05.2016, 09:31
Ва


Это называется "не читал но осуждаю". Вот вы почитайте сообщение, на которое я дал ссылку в пункте 3. Там Евстигнеев Максим (не мне вам рассказывать кто это такой) говорит, что "внутри у ОВЕНа" механизм автоматического тестирования используется. Придёт время -- сделают механизм доступным публике.

Автоматических тестов, которые могут использоваться за пределами ОВЕН, в ОЛ нет.
Это называется- СЛышал звон , да не знаю где он .Мы в отличие от вас наслышаны про эти тестирования и выявили не один десяток багов ..

rovki
31.05.2016, 09:36
Никаких рядов и просто кучка "if (1 < x < 10) {...}"
А почему нет ,если я в свое время делал синус на таблице на 64 значения .Сделать таблицу для десятичного логарифма ,а потом перевести в натуральный ...

Владимир Ситников
31.05.2016, 09:37
Мы в отличие от вас наслышаны про эти тестирования и выявили не один десяток багов..
Я говорю не про тесты самого ОЛ или ПР. А про возможность автоматического тестирования пользовательских ОЛ-программ.
Ваши слова как-то обосновывают, что в ОЛ есть автоматические тесты? Ни в документации ни на форуме про автоматические тесты ни слова.
Пока вы лишь бросаетесь словами на ветер "тесты в ОЛ есть".

Владимир Ситников
31.05.2016, 09:40
А почему нет ,если я в свое время делал синус на таблице на 64 значения .Сделать таблицу для десятичного логарифма ,а потом перевести в натуральный ...
Именно! Хороший и рабочий способ. Только к Тейлору он не имеет никакого отношения, а, ведь, кто-то (ну, кто не знает как в ПР/ПЛК принято вычислять тригонометрию) может, неглядя, составить схему Тейлора и огрести.

Алексей Геннадьевич
31.05.2016, 09:47
А вы слышали про логарифмическую?
У неё шкала весьма ограничена, и чтобы вычислить LN(20000) нужно пользоваться чем-то вида LN(20000) = LN(2*10000) = LN(2) + 4*LN(10)
Так что ваш пример лишь подтверждает мои слова.
Всю математику можно свести к 4м арифметическим действиям. Вопрос лишь в удобстве реализации на конкретной платформе.


Я привёл ссылку на сообщение Максима. Вы пишете "танцор и его яйца". Зачем так про него?
Не надо передёргивать. Кто номерные пункты выкладывал?:mad:
И Дилберта не просто-так упомянул.

rovki
31.05.2016, 09:52
Я говорю не про тесты самого ОЛ или ПР. А про возможность автоматического тестирования пользовательских ОЛ-программ.

Пока вы лишь бросаетесь словами на ветер "тесты в ОЛ есть".
А Максим говорил про тестирование ПР ..чувствуюте разницу .Для тестирования проектов есть симулятор и ни какой тест не выявит ошибок в алгоритме ,а про ошибки пользователей в среде ОЛ при написании позаботились разработчики ОЛ ,в отличие от ошибок при написании проекта в ПЛК ,вот вам туда ...

rovki
31.05.2016, 09:55
Не надо советовать Тейлора там, где он заведомо неприменим. Это натуральная медвежья услуга.




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

rovki
31.05.2016, 10:00
Не надо передёргивать. Кто номерные пункты выкладывал?:mad:
И Дилберта не просто-так упомянул.
Об этом ему уже не раз указывалось ,за такое на 3 буквы посылают или морду чистят в приличном обществе .
За пол года на форуме один негатив и никакой пользы для пользователей ПР ,не знаю уж как там для плк ....Был у нас один пользователь ,что то уже несколько лет не видно, AT ,вот это был настоящий программист ,в том смысле ,что решал ,не для себя задачи на ОЛ .И итерации и ряды .До сих пор люди его макросами пользуются и говорят спасибо ,а сколько спасибо сказали vladimirisitnikovy в теме ПР,ОЛ...???

Владимир Ситников
31.05.2016, 10:01
ни какой тест не выявит ошибок в алгоритме
Разве?

Есть простой тест: ln(1.0), ln(1.01), ln(1.02),... ln(20), ... ln(100500)
Т.е. просто сравнить ожидаемые значения с теми, что фактически получаются.
Если в алгоритме есть ошибка, то значения будут расходиться сильнее допустимого.

rovki
31.05.2016, 10:08
Разве?

Есть простой тест: ln(1.0), ln(1.01), ln(1.02),... ln(20), ... ln(100500)
Т.е. просто сравнить ожидаемые значения с теми, что фактически получаются.
Если в алгоритме есть ошибка, то значения будут расходиться сильнее допустимого.
Не впутывайте меня в пустобреханье :mad: С логарифмом разобрались и достаточно .

Владимир Ситников
31.05.2016, 10:18
Не впутывайте меня в пустобреханье :mad: С логарифмом разобрались и достаточно.

Чего сердитесь?
Вы говорите: "ни какой тест не выявит ошибок в алгоритме".
Я привожу пример теста, который проверит правильность значений, которые выдаёт алгоритм вычисления логарифма.

На этом шаге вы должны были сказать "был неправ, тестировать логарифмы можно", но вы почему-то начинаетесь сердиться и ругаться.
Учитесь признавать свои ошибки.
Давить авторитетом и количеством макросов на форуме, конечно, удобно, но признавать свои ошибки тоже нужно уметь.

rovki
31.05.2016, 10:19
Чур меня +,чур меня +...+
Что тут поделаешь ,если для человека алгоритм работы устройства =алгоритму вычисления функции ..

Владимир Ситников
31.05.2016, 10:32
Всю математику можно свести к 4м арифметическим действиям. Вопрос лишь в удобстве реализации на конкретной платформе.
Алексей,

Я говорил "Одной и той же формулой это не накроешь."
Если вы формулой называете "весь макрос", то я умываю руки. Разве у кого-то были сомнения, что "можно составить макрос вычисления логарифма"?

Если вы говорите, что "всё вычисление логарифма можно свести к 4м арифметическим действиям" -- я просто не поверю, пока не увижу конкретику.

Если вы говорите, что "достаточно добавить пару действий перед Тейлором", то, во-первых это не пара действий (да, и не 4 действия, а в зависимости от требуемого диапазона), а во-вторых, это лишь подтверждает, что "одной формулой Тейлора не накроешь".


Не надо передёргивать. Кто номерные пункты выкладывал?
Давайте больше конкретики. Если вы просто считаете, что автоматические тесты программ ОЛ не нужны -- ваше право, но мне, честно говоря, это не интересно.
Ваш PID регулятор попался на тривиальном тесте, и возможность автотестирования программ в ОЛ позволила бы подобные проблемы ловить до выхода в эксплуатацию.

Алексей Геннадьевич
31.05.2016, 11:52
Алексей,

Я говорил "Одной и той же формулой это не накроешь."
Если вы формулой называете "весь макрос", то я умываю руки. Разве у кого-то были сомнения, что "можно составить макрос вычисления логарифма"?
Не надо ерунду говорить. В один мкрос можно насовать столько формул, сколько влезет, и формулу по нескольким макросам разложить. Вопрос удобства, не более того.

Если вы говорите, что "всё вычисление логарифма можно свести к 4м арифметическим действиям" -- я просто не поверю, пока не увижу конкретику.
Извините, наврал- к двум. Если точнее: сложению и вычитанию. Как пример - любой настольный 8ми разрядный ПК 70х-80х годов выпуска. Процессоры I8080 и Z80 которые в них применялись, команд умножения и деления не имели.


Давайте больше конкретики. Если вы просто считаете, что автоматические тесты программ ОЛ не нужны -- ваше право, но мне, честно говоря, это не интересно.
Ваш PID регулятор попался на тривиальном тесте, и возможность автотестирования программ в ОЛ позволила бы подобные проблемы ловить до выхода в эксплуатацию.
И как это представляешь?
Вполне представляю блестяще написанную программу для ПР, великолепно прошедшую все автоматические тесты, но нихрена не работающую на реальном оборудовании.
Или работающую некорректно.
В 2005г в москве свет автоматическая программа управления энергоснабжением вырубила энергию во всём городе, хотя достаточно было пару-тройку спальных районов отключить.

Владимир Ситников
31.05.2016, 12:18
Извините, наврал- к двум. Если точнее: сложению и вычитанию. Как пример - любой настольный 8ми разрядный ПК 70х-80х годов выпуска. Процессоры I8080 и Z80 которые в них применялись, команд умножения и деления не имели.
Ага, можно вообще на одной только стрелке Пирса сделать логарифм.
Но в реальности, вопрос не в том какие операции использовать, а в том, как их объединить.
Тейлор -- один из вариантов. Кусочно-линейное представление -- другой.
И говорить "для вычисления логарифма достаточно сложений" это занудство.

Если что, то я конкретные (рабочие) (http://www.owen.ru/forum/showthread.php?t=24165&p=210638&viewfull=1#post210638) варианты уже озвучил (http://www.owen.ru/forum/showthread.php?t=24165&p=210673&viewfull=1#post210673), а не просто рассуждаю о стрелках Пирса.


И как это представляешь?
Вполне представляю блестяще написанную программу для ПР, великолепно прошедшую все автоматические тесты, но нихрена не работающую на реальном оборудовании.
Или работающую некорректно.
И? Всё верно: автоматические тесты на симуляторе не являются достаточным критерием правильности. Нужны тесты на железе, тесты с реальным миром и т.п.
Но, с другой стороны: наличие тестов повышает надёжность? Разумеется, повышает. Именно про это я и говорю (и говорил с самого начала): нужна возможность делать автотесты, чтобы повышать стабильность/надёжность.

Если вопрос о том "как именно делать интеграционные автотесты, включающие в себя симуляцию реальных объектов, печей, механизмов" -- это отдельный вопрос.
Видели же как Yegor игровой движок прикручивал для симуляции физики?
Ну и Simulink переизобретать вряд ли просто так получится.

А что-то попроще -- уже может быть и полезно, и неложно в реализации.
Начать бы с простых "при подаче такого-то значения на вход, через N тактов должно оказаться такое-то значение на выходе".


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

В КДС средство автоматического тестирования это вообще отдельный компонент, и за него берут немалые деньги: http://store.codesys.com/codesys-test-manager.html

Woolfy
31.05.2016, 13:44
А почему нет ,если я в свое время делал синус на таблице на 64 значения .Сделать таблицу для десятичного логарифма ,а потом перевести в натуральный ...Таблицы Брадиса - наше всё! Все жалеют, что выбросили после появления логарифмических линеек, куркуляторов и т. п...

игорь68
01.06.2016, 00:53
Логарифмы, синусы, косинусы, тангенсы . В пр можно затолкать все что угодно. Будет ли она от этого лучше работать. Из 200сот тонного Белаза некто не делает машину для перевозки суши. Так почему все стараются наделить РЕЛЕ возможностями ПЛК. И задумывалась ПР как РЕЛЕ. И функционал у ПР как у РЕЛЕ. И простенький софт ДЛЯ РЕЛЕ. Если всем так нужен такой функционал по просите Овен пусть сделаю для математиков DSP модуль и делайте на этом. Тут вам все будет. И даже 9 знаков после запятой в результате. По мне интереснее как немцы и французы к своим реле GSM модем прикрутили.

Владимир Ситников
01.06.2016, 09:48
Так почему все стараются наделить РЕЛЕ возможностями ПЛК
Уважаемый, вы как проводите границу между реле и ПЛК?
В чём проблема использования логарифмов в ПР?
ПР от этого что-ли хуже работать будет?


По мне интереснее как немцы и французы к своим реле GSM модем прикрутили
Заводите свою тему -- там интересуйтесь. Тут тема про логарифм.

Мордорец
01.06.2016, 11:56
ПР от этого что-ли хуже работать будет?

Оно будет дороже.

Алексей Геннадьевич
01.06.2016, 13:17
Ага, можно вообще на одной только стрелке Пирса сделать логарифм.
Займётесь?:)


Если что, то я конкретные (рабочие) (http://www.owen.ru/forum/showthread.php?t=24165&p=210638&viewfull=1#post210638) варианты уже озвучил (http://www.owen.ru/forum/showthread.php?t=24165&p=210673&viewfull=1#post210673), а не просто рассуждаю о стрелках Пирса.

За это время пока посты писал, rovki макросы в качестве помощи выкатывал...


И? Всё верно: автоматические тесты на симуляторе не являются достаточным критерием правильности. Нужны тесты на железе, тесты с реальным миром и т.п.
Но, с другой стороны: наличие тестов повышает надёжность? Разумеется, повышает. Именно про это я и говорю (и говорил с самого начала): нужна возможность делать автотесты, чтобы повышать стабильность/надёжность.

А что-то попроще -- уже может быть и полезно, и неложно в реализации.
Начать бы с простых "при подаче такого-то значения на вход, через N тактов должно оказаться такое-то значение на выходе".

В ОЛ неплохо сделать не полный автотест, а типа сценария: когда тестируешь, приходится многократно вводить в одном и том-же порядке одни и те-же данные, имитируя запуск станка, только для того, чтобы на определённом этапе смоделировать аварийную ситуацию. А это 10-30 шагов исполнения программы, которые приходится повторять.

Владимир Ситников
01.06.2016, 13:37
Оно будет дороже.

ПР станет дороже от того, что кто-то напишет программу в ОЛ? С чего бы?
В железе уже достаточно возможностей чтобы вычислять логарифмы. Даже в текущем ОЛ можно сделать логарифм.
Откуда удорожание?

rovki
01.06.2016, 13:59
Даже в текущем ОЛ можно сделать логарифм.

Ну так сделайте и закроем тему ,что воду то лить .

Владимир Ситников
01.06.2016, 14:09
Займётесь?:)
Нет.
Посмотреть готовую-полуготовую схему я ещё могу.
А делать с нуля в ОЛ у меня желания абсолютно нет.
Кому нравится (или кого припёрло) -- пускай делают.

Математическая составляющая мне интересна, а рисовать квадратики в ОЛ -- не моё.


За это время пока посты писал, rovki макросы в качестве помощи выкатывал...
Да, всё верно. Я разве когда-нибудь говорил, что rovki бесполезным делом занимается?
Нравится ему макросы выкладывать -- пущай выкладывает. Кому-то пригодятся и ладно.
Замечу, что моё сообщение (http://www.owen.ru/forum/showthread.php?t=24165&p=210638&viewfull=1#post210638) это вообще первый на форуме owen совет про способы вычисления логарифма.

Я к чему. Не к тому, чтобы похвастаться, а к тому, что тут же налетят коршуны (сами знаете как их зовут) и скажут: "вон, смотрите, он как обычно со своей стрелкой Пирса упражняется, а дельного никогда не делал".

maximov2009
02.06.2016, 04:21
Да, всё верно. ............. дельного никогда не делал".
Как ни прискорбно, но действительно в теме ОЛ и ПР конкретных примеров Вы не давали (насколько я слежу). Акромя критики и предложений космического масштаба. Сделайте уж что нибудь конкретное в этом разделе и заткните всех за пояс.
Высказывания типа "Посмотреть готовую-полуготовую схему я ещё могу. А делать с нуля в ОЛ у меня желания абсолютно нет." к чему они?
Не хотите работать с ОЛ - флаг в руки. Для моих задач например в 90% случаев ПЛК избыточен, а ПР как раз. И функционала ОЛ вполне хватает.
С уважением.

Владимир Ситников
02.06.2016, 11:14
Как ни прискорбно, но действительно в теме ОЛ и ПР конкретных примеров Вы не давали (насколько я слежу). Акромя критики
Дай человеку рыбу и он будет сыт весь день. Дай человеку леща и он пойдёт работать.


Сделайте уж что нибудь конкретное в этом разделе и заткните всех за пояс.
Затыкать кого бы то ни было куда бы то ни было это по-детски. Я уже вырос из этого.
В сообщении #7 указано 3 конкретных примера (http://www.owen.ru/forum/showthread.php?t=24165&p=210638&viewfull=1#post210638) как вычислить логарифм. Если присмотреться, то по второй ссылке 5 формул для разной точности.

Вы готовы сказать: "был неправ, конкретный пример вычисления логарифма был"?

К слову, есть и от критики "нотариально заверенная" польза:

Ваши замечания приняты. Интегратор переписан заново, ...


Высказывания типа "Посмотреть готовую-полуготовую схему я ещё могу. А делать с нуля в ОЛ у меня желания абсолютно нет." к чему они?
Как к чему? Это прямой ответ на прямо поставленный вопрос.
В #36 и #38 мне явно предложили составить макрос логарифма (что, в целом, логично), но я открыто говорю, что без компенсации меня на ОЛ программировать не заманишь.

AI!
04.06.2016, 13:36
Двоичный логарифм

PS
ln(x)=lb(x)/lb(e)=ln(2)*lb(x) = 0,69314718*lb(x)
lg(x)=lb(x)/lb(10)=lg(2)*lb(x) = 0,30103*lb(x)

rovki
04.06.2016, 15:46
Двоичный логарифм

PS
ln(x)=lb(x)/lb(e)=ln(2)*lb(x) = 0,69314718*lb(x)
lg(x)=lb(x)/lb(10)=lg(2)*lb(x) = 0,30103*lb(x)
Ну наконец то AI ,нас услышал ;). Вот это Программист (математик) ,без шума и пыли ,сказал- сделал .Причем не для себя ,а для других .Не то что некоторые ...

Владимир Ситников
04.06.2016, 16:14
Двоичный логарифм

Вот это типичный пример "макроса для ПР".
"верьте, он работает".
Про алгоритм вычисления, область допустимых значений, и точность результата ничего не сказано.

AI!
04.06.2016, 16:21
Вот это типичный пример "макроса для ПР".
"верьте, он работает".
Про алгоритм вычисления, область допустимых значений, и точность результата ничего не сказано.Мистер всезнайка? Будем знакомы...
1) макрос выложил на всеобщее тестирование, и для задавание вопросов...
2) у меня ребёнок так же рассуждает: "Про алгоритм вычисления, область допустимых значений, и точность результата ничего не сказано."
а я её учу перефразировать "ругательство" в просьбу, напр. так: "Какой алгоритм используется вычисления? какая область допустимых значений и точность результата?"

PS кстати, про тестирование - это уже вторая версия макроса выложенная мной... первую "затёр" отредактировав сообщение....

AI!
04.06.2016, 16:27
Но всё же отвечу:
1) область допустимых значений >0 до "машинной бесконечности" ПР114 (3,40E+038)
2) точность - до 1/256 (с лёгкостью можно увеличить точность... надо?)

алгоритм - думаю что что-то похожее используется в FPU процессоров.

rovki
04.06.2016, 16:43
А то же самое,но с итерациями могем ?:o

AI!
04.06.2016, 16:46
А то же самое,но с итерациями могем ?:oя ж наоборот от них избавился, "развернув цикл в линию", что бы ответ был мгновенный...

PS хотя можно сделать и итерации для вычисления более точного результата....

AI!
04.06.2016, 16:50
только у меня при нажатии кнопки "редактировать" появляется пустое поле ввода, и всё сообщение приходиться вводить снова, или вставлять из буфера?

rovki
04.06.2016, 16:56
я ж наоборот от них избавился, "развернув цикл в линию", что бы ответ был мгновенный...

PS хотя можно сделать и итерации для вычисления более точного результата....
Ну то есть кому что надо - быстро или точно :rolleyes: Я в вас не ошибся ,спасибо !! Не пропадайте и чаше пишите на форуме .Как работа?

rovki
04.06.2016, 17:09
оппонент ,наверное пошел википедию штудировать ;) https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_% D0%BB%D0%BE%D0%B3%D0%B0%D1%80%D0%B8%D1%84%D0%BC

AI!
04.06.2016, 17:20
оппонент ,наверное пошел википедию штудироватьну да, пока я писал код, эта страница была у меня перед глазами...
т.к. про алгоритм я немного слукавил - я его сам, на ходу придумывал, и нужны были св-ва логарифмов перед глазами...

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

PS кстати, в ПР есть встроенный целочисленный двоичный логарифм - "CD32", которым я незамедлил воспользоваться...

Владимир Ситников
04.06.2016, 17:35
а я её учу перефразировать "ругательство" в просьбу, напр. так: "Какой алгоритм используется вычисления? какая область допустимых значений и точность результата?"
Студентов и школьников учат подписывать оси на графиках.

Выкладывать математический алгоритм без указания границ его применимости это как выкладывать график "без подписи осей".


Но всё же отвечу:
1) область допустимых значений >0 до "машинной бесконечности" ПР114 (3,40E+038)
Вы ОДЗ логарифма или вашего алгоритма имели ввиду?
Про ОДЗ логарифма и так все знают.
А про то "числа из какого диапазона можно подавать вашему макросу на вход, чтобы на выходе получать более-менее нормальную точность" -- это как раз то, что нужно не меньше самого макроса.


2) точность - до 1/256 (с лёгкостью можно увеличить точность... надо?)
До 1/256 это как? Абсолютная погрешность в 1/256 на всём интервале? Относительная?

PS. Мне логарифм не нужен (если вдруг не читали эту тему).


алгоритм - думаю что что-то похожее используется в FPU процессоров.
Хорошая ссылка на первоисточник. Надёжная. Главное, проверить правильность можно.

FPU табличными методами работают.

AI!
04.06.2016, 17:49
Вы ОДЗ логарифма или вашего алгоритма имели ввиду?да
До 1/256 это как?если Вы не в курсе, ПР как и любая другая ЭВМ считает, и хранит информацию в двоичном виде, поэтому число вида 1/2ⁿ в компьютере будет точное, а 1/10ⁿ будет округлённым
Абсолютная погрешность в 1/256 на всём интервале?да, абсолютная
Мне логарифм не нужентогда зачем все эти вопросы?
FPU табличными методами работают.то что современные FPU больше похожи на таблицы Брадиса, я знаю, но не всегда это было так....
PS наверняка вы даже не смотрели мой код, и к тому же этот макрос вам не нужен, поэтому я пожалуй больше не буду с вами его обсуждать...
Буду бисер экономить...

rovki
04.06.2016, 18:02
ну да, пока я писал код, эта страница была у меня перед глазами...

Правда я не вам это адресовал .;)Ни кто в голове энциклопедию не носит ,поэтому к ней обращаются все .Главное не кичится знаниями и не делать много ссылок на википедию и прочие авторитеты ,а то может сложиться мнение ,что статьи эти сам писал ,что частенько делает vladimirisitnikov .

MriduVaju
04.06.2016, 18:35
Двоичный логарифм

PS
ln(x)=lb(x)/lb(e)=ln(2)*lb(x) = 0,69314718*lb(x)
lg(x)=lb(x)/lb(10)=lg(2)*lb(x) = 0,30103*lb(x)

Молодец!! По белому завидую.;)

rovki
04.06.2016, 18:43
Молодец!! По белому завидую.;)
И ни каких 5 формул ..;). Потому как человек не только владеет математикой но и архитектурой ВТ ,знает как изнутри все это работаем железо ,а не абстрактно a=d+c/e*f ....

Владимир Ситников
04.06.2016, 18:49
да
-- Вы будете чай или кофе?
-- Да


но не всегда это было так....
Как всё-таки это помогает ответить на вопрос "каким алгоритмом считается логарифм"?

Вот использование CD32 для логарифмирования -- это интересно.

А просто так "вот логарифм, тестируйте сами" это, к сожалению, типичная для "ПР макросов" картина.
Бывают, конечно, исключения, где народ в области обводит и комментарии ставит. Но, к сожалению, таких гораздо меньше.


PS наверняка вы даже не смотрели мой код,
Знаете, я не удивлюсь, если я окажусь единственным, кто реально смотрел ваш код.


зачем все эти вопросы?
Ещё раз: если вы не считаете необходимым указать границы применимости -- продолжайте в том же духе.

rovki
04.06.2016, 19:02
--

Знаете, я не удивлюсь, если я окажусь единственным, кто реально смотрел ваш код.


Ещё раз: если вы не считаете необходимым указать границы применимости -- продолжайте в том же духе.
Не льстите себе ,макрос уже скачали 6 человек ..
Вот до копались до границ ...Границы диктует ПР(ОЛ) ,что об этом сто раз говорить .

AI!
04.06.2016, 21:16
-- Вы будете чай или кофе?
-- ДаМистер всезнайка, похоже ещё и Мистер никогданеошибайка...
А вот я ошибаюсь.... а форум мне не позволяет редактировать сообщения... (на пред. странице писал об этом)
Как всё-таки это помогает ответить на вопрос "каким алгоритмом считается логарифм"?автор алгоритма AI!, так устроит?
Вот использование CD32 для логарифмирования -- это интересно.уверен что никто никогда не делал подобного, что позволяет мне присвоить себе идею этого алгоритма...
если вы не считаете необходимым указать границы применимости -- продолжайте в том же духе.ещё раз для непонятливых.
границы применимости во всём диапазоне допустимых значений вещественного типа ПР114, т.е. 0<x<3,40282366920938E38
или точнее: 0<x<2^128
PS для 0 макрос выдаст 0, для отрицательных чисел - для вычисления будет взят модуль числа.

AI!
04.06.2016, 21:21
границы применимости во всём диапазоне допустимых значений вещественного типа ПР114<x<3,40282366920938e38
<x<2^128
опять этот чёртов форум покромсал моё сообщение...
ладно и так понятно...


</x<2^128
</x<3,40282366920938e38

Владимир Ситников
04.06.2016, 21:58
А вот я ошибаюсь....
Снимаю шляпу. Без шуток. На этом форуме мало кто может согласиться с тем, что ошибся.


автор алгоритма AI!, так устроит?
И да и нет.
Смысл вопроса был простой: если реализован алгоритм с wikipedia, то можно открыть статью, открыть программу, и сравнить.
Если алгоритм самопальный, то его, к сожалению, не сравнишь "с оригиналом".

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


границы применимости во всём диапазоне допустимых значений вещественного типа ПР114, т.е. 0 < x < 3,40282366920938E38
"абсолютная погрешность не превышает 1/256 для всех входных значений".
Это ок. Я это услышал.
Я говорю про то, что слова про погрешность и диапазон значений должны звучать сразу.

ОДЗ ПР уже не так важно. В конце концов, открываем справку по ОЛ и там наверняка будет.
Что именно выдаст макрос на 0, конечно, тоже важно, но, блин, посмотрел бы я на того, кто реально пытается log(0) вычислять.

rovki
04.06.2016, 22:06
Я говорю про то, что слова про погрешность и диапазон значений должны звучать сразу.

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

MriduVaju
05.06.2016, 11:14
Я конечно понимаю, что главное чтобы работало, но я лично не могу использовать в своих проектах запутанные, как клубок проводов, макросы. Вот, посидел, переделал макрос от AI.

AI!
05.06.2016, 13:06
это первый мой макрос в новом интерфейсе... не освоил я его ещё...
PS мой RND1024 видели?

MriduVaju
05.06.2016, 13:56
нет, не видел. дадите ссылку посмотрю))

AI!
05.06.2016, 14:16
http://www.owen.ru/forum/showthread.php?t=7023&p=98924&viewfull=1#post98924

AI!
07.06.2016, 22:39
Вторая версия макроса "Двоичный логарифм", с использованием цикла, но и более точным ответом.
На этот раз мгновенный ответ с точностью до 0.5, повышая точность с каждым тактом ПР на один двоичный разряд
(точность 1/2ⁿ, где n-номер такта после изменения начального значения)
PS на 20ом такте достигается максимально возможная точность (1/2^20 ~ 1/10^6)
PPS по просьбам читателей, все связи в схеме абсолютно читаемы... (простите за тавтологию)

MriduVaju
09.06.2016, 13:35
Тишина... Видимо у всех просто нет слов:) Да уж, дружище, твоему усердию можно только позавидовать.

Владимир Ситников
09.06.2016, 13:52
А давайте я вопрос задам?
Почему первые биты определяются пачками (через CD32), а остальные по одному?
В чём смысл получения битов по одному, если есть логарифмирующий блок?

Разе не получается вообще все биты через CD32 получать?
Образно: получили первые 32, поделили на 2CD32, умножили на 232, снова вызываем CD32.

И не придётся ждать 20 тактов.

AI!
09.06.2016, 18:51
Почему первые биты определяются пачками (через CD32), а остальные по одному?спасибо за идею... надо подумать..

AI!
12.06.2016, 01:12
Подумал...
В новой версии всё так же как и в первой, т.е. работает мгновенно, во всех допустимых значениях от 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)

Владимир Ситников
12.06.2016, 22:13
Подумал...
В новой версии всё так же как и в первой, т.е. работает мгновенно, во всех допустимых значениях от 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.

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

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)

AI!
12.06.2016, 23:56
lb(1.01) == 0.014355292977070055
Вариант с тремя CD32 выдаёт 1.2e-2я же сказал - точность до 1/256 (~0,004), правда забыл уточнить, что округление всегда в меньшую сторону (по модулю)
откуда ваша формула? можно ссылку?

PS тем временем сделал вариант с 4мя итерациями, получается точность 1/8192,
так же добавил выходы с ln(x) и lg(x), с учётом понижающего коэффициента, точность получается 1e-4

Владимир Ситников
13.06.2016, 00:07
я же сказал - точность до 1/256 (~0,004), правда забыл уточнить, что округление всегда в меньшую сторону (по модулю)
Это понятно. Я про то, что для близких к 1 значений можно вместо CD32 использовать ряд и тем самым повысить точность.


откуда ваша формула? можно ссылку?
7-е сообщение в этой теме (http://www.owen.ru/forum/showthread.php?t=24165&p=210638&viewfull=1#post210638), 1-ая ссылка.

Могу повторить: https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B0%D1%80%D0%B8%D1%84%D0%BC#m ath_.D0.A0.D1.8F.D0.B4_2

AI!
13.06.2016, 01:14
то точность будет почти до 1e-7.Убедили.
Новая версия, на этот раз только натуральный логарифм (как самый востребованный)
И точность, с ваших слов, почти до 1e-7

Владимир Ситников
13.06.2016, 11:06
Убедили.
Новая версия, на этот раз только натуральный логарифм (как самый востребованный)
И точность, с ваших слов, почти до 1e-7

CD32 выдаёт "оценку логарифма снизу". Значит, на 2(y+y3/3) подаются числа больше 1. Будут ли все они меньше 1.1? Без понятия (==надо вдумчиво курить CD32), но по нескольким тестам все они оказываются меньше 1.1

Вот график ln(x)-2(y+y3/3) (http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiJsbih4KS0yKCh4LTEpLyh4KzEpK ygoeC0xKS8oeCsxKSleMy8zKSIsImNvbG9yIjoiIzAwMDAwMCJ 9LHsidHlwZSI6MTAwMCwid2luZG93IjpbIjEiLCIxLjEiLCItM S4xZS04IiwiMS4xZS03Il19XQ--) (диапазон по вертикали: -1e-8 .. 1e-7):
24931

AI!
13.06.2016, 11:28
Будут ли все они меньше 1.1? Без понятияда.
то что на входе 3ей итерации даёт ответ строго меньше 1/8,
т.е. на входе оной будет строго меньше 2^(1/8)~1,09050

PS может всё же вернуть на место 3ю итерацию?
а с помощью рядов считать 4ую, и на входе рядов будет меньше 2^(1/256)~1,0027

AI!
13.06.2016, 12:43
да.
то что на входе 3ей итерации даёт ответ строго меньше 1/8,
т.е. на входе оной будет строго меньше 2^(1/8)~1,09050ещё подумал..... и просто сдвинул "ожидаемый ответ" от 3ей итерации с (0..1/8) на (-1/16..1/16)
т.е. на входе оной вместо (1;1,09050) будет (0,95760;1,04427), что ещё повысит точность...

Владимир Ситников
13.06.2016, 12:51
да.
то что на входе 3ей итерации даёт ответ строго меньше 1/8,
т.е. на входе оной будет строго меньше 2^(1/8)~1,09050

PS может всё же вернуть на место 3ю итерацию?
а с помощью рядов считать 4ую, и на входе рядов будет меньше 2^(1/256)~1,0027

А смысл возвращать третью итерацию cd32? 1.09 вполне достаточно для ряда. А fpow 256 вряд ли положительно скажется на скорости.

Владимир Ситников
13.06.2016, 14:59
ещё подумал..... и сдвинул "ожидаемый ответ" от 3ей итерации с (0..1/8) на (-1/16..1/16)
т.е. на входе оной вместо (1;1,09050) будет (0,95760;1,04427), что ещё повысит точность...
Да прибавить 0.5 ко второму CD32 это правильно.

И ещё вопрос: в чём великая задумка fDIV(x, x) и последующего fMUL в самом начале? По-моему, эти блоки лишние.

AI!
13.06.2016, 16:02
И ещё вопрос: в чём великая задумка fDIV(x, x) и последующего fMUL в самом начале? По-моему, эти блоки лишние.привычка программиста - отсекать неправильные значения... (т.н. "защита от дурака")
x/x=1 при x!=0, и в ПР x/x=0 при x=0
т.е. ещё когда не было ни строчки ниже первого блока, я вставил эту проверку, что бы обнулить выход когда x=0
(изначально я предполагал, что на выходе может быть случайное значение)

PS по этой же причине я делаю проверку x=1, и если это так, то умножаю ответ на 0

Владимир Ситников
13.06.2016, 18:02
привычка программиста - отсекать неправильные значения... (т.н. "защита от дурака") в ПР x/x=0 при x=0
Блин. Есть же стандарты на то, что должно получаться при 0/0.
Интересно, ОВЕН во всех своих приборах теперь будет воспроизводить багу с 0/0=0?
По-моему, выглядит хлипковато, даже, если и работает на текущем железе.

Ошибочные числа вида NaN / inf на общей схеме видно. А про 0 далеко не сразу скажешь, что это признак "ошибки".

Ну, выйдет какое-нибудь ПР440 на другом процессоре. Там тоже будет 0/0=0?
Если уж и делать "защиту от ln(0)", то лучше ставить всем понятное fGT(1e-37). Т.е., если исходное значение меньше 1e-37 (ну или чему там +0 равен), то возвращать -infinity. Всем понятно, и без завязок на конкретное ПР с его 0/0.

AI!
13.06.2016, 21:59
Блин. Есть же стандарты на то, что должно получаться при 0/0.Уже обсуждался этот вопрос на этом форуме.
Народ ожидает что 0*x должен быть всегда 0, даже если x=∞, т.к. умножение часто используется как вещественное SEL.
То же самое и с делением.

PS скорее всего до этого всё работало так как Вы хотите....

PPS ещё в МК-61 была функция знак(х), на ПР её можно смоделировать как x/|x|
так что мне нравится текущее положение дел...

Владимир Ситников
13.06.2016, 22:12
т.к. умножение часто используется как вещественное SEL
Лучше бы fSEL сделали (http://www.owen.ru/forum/showthread.php?t=23251), если реально 0/0=0 делали для того, чтобы использовать fMUL как fSEL... Но сейчас налетят модераторы и начнут сообщения удалять.