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

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от AI! Посмотреть сообщение
    Убедили.
    Новая версия, на этот раз только натуральный логарифм (как самый востребованный)
    И точность, с ваших слов, почти до 1e-7
    CD32 выдаёт "оценку логарифма снизу". Значит, на 2(y+y3/3) подаются числа больше 1. Будут ли все они меньше 1.1? Без понятия (==надо вдумчиво курить CD32), но по нескольким тестам все они оказываются меньше 1.1

    Вот график ln(x)-2(y+y3/3) (диапазон по вертикали: -1e-8 .. 1e-7):
    Снимок экрана 2016-06-13 в 11.05.03.png
    Изображения Изображения

  2. #2
    Пользователь
    Регистрация
    21.01.2011
    Адрес
    еБург
    Сообщений
    890

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Будут ли все они меньше 1.1? Без понятия
    да.
    то что на входе 3ей итерации даёт ответ строго меньше 1/8,
    т.е. на входе оной будет строго меньше 2^(1/8)~1,09050

    PS может всё же вернуть на место 3ю итерацию?
    а с помощью рядов считать 4ую, и на входе рядов будет меньше 2^(1/256)~1,0027
    Последний раз редактировалось AI!; 13.06.2016 в 11:48.
    начинающий профессионал

  3. #3
    Пользователь
    Регистрация
    21.01.2011
    Адрес
    еБург
    Сообщений
    890

    По умолчанию

    Цитата Сообщение от AI! Посмотреть сообщение
    да.
    то что на входе 3ей итерации даёт ответ строго меньше 1/8,
    т.е. на входе оной будет строго меньше 2^(1/8)~1,09050
    ещё подумал..... и просто сдвинул "ожидаемый ответ" от 3ей итерации с (0..1/8) на (-1/16..1/16)
    т.е. на входе оной вместо (1;1,09050) будет (0,95760;1,04427), что ещё повысит точность...
    Вложения Вложения
    • Тип файла: zip ln.zip (173.7 Кб, Просмотров: 95)
    Последний раз редактировалось AI!; 13.06.2016 в 14:49.
    начинающий профессионал

  4. #4

    По умолчанию

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

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

  5. #5
    Пользователь
    Регистрация
    21.01.2011
    Адрес
    еБург
    Сообщений
    890

    По умолчанию

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

    PS по этой же причине я делаю проверку x=1, и если это так, то умножаю ответ на 0
    Последний раз редактировалось AI!; 13.06.2016 в 16:21.
    начинающий профессионал

  6. #6

    По умолчанию

    Цитата Сообщение от AI! Посмотреть сообщение
    привычка программиста - отсекать неправильные значения... (т.н. "защита от дурака") в ПР 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.

  7. #7
    Пользователь
    Регистрация
    21.01.2011
    Адрес
    еБург
    Сообщений
    890

    По умолчанию

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

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

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

  8. #8

    По умолчанию

    Цитата Сообщение от AI! Посмотреть сообщение
    да.
    то что на входе 3ей итерации даёт ответ строго меньше 1/8,
    т.е. на входе оной будет строго меньше 2^(1/8)~1,09050

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

Похожие темы

  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

Ваши права

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