Для тех, кто хочет поломать голову в свободное время, на днях столкнулся со сборкой REAL из 2 WORD в этой теме https://owen.ru/forum/showthread.php?t=39248&page=4#39
Открыл что было быстрее, в ОЛ программу сборки от capzap ( когда то он её выложил в одной из тем), программу проверял в нескольких пределах, всё работало правильно.
Ввёл числа 52429 и 16268 и получил 0.1 1 Сборка REAL.jpg Потом проверил в другой программе Codesys 2.3 , получил 1.1 1 Передача REAL_2.jpg
Позже оказалось что Функция arrWToReal, врёт только на пределе от 1.0 до 1.99999 и от -1.0 до -1.99999, на остальных пределах считает правильно.
Вопрос, где ошибка в коде функции arrWToReal ?
Выложил вариант в Лоджике и в Codesys 2.3, кому как удобнее.
В Codesys 2.3, для сравнения функция через указатели, считает правильно.
Сам пока решил, вводом дополнительной строки в конце функции.
Последний раз редактировалось kondor3000; 24.03.2024 в 11:45.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Если верить Число одинарной точности
то:
Owen.jpg
получается:
Код:.. exp_raw := shr(stuffAdd, 23) mod 256; mantissa := stuffAdd mod 8388608; if exp_raw = 0 then mantissa := mantissa + 8388608; end_if; exponent := udint_to_real(exp_raw) - udint_to_real(127); mant_mult := 1; ..
Последний раз редактировалось kondor3000; 14.12.2024 в 16:42.
Последний раз редактировалось Валенок; 24.03.2024 в 15:50.
Этот вариант у меня уже давно есть, только в выложенном варианте опять ошибка, получается 0.1 1 Ошибка в вычислении.jpg а здесь правильно 1.1 1 Нет ошибки.jpg
Последний раз редактировалось kondor3000; 24.03.2024 в 16:01.
Менеджер по продукту | Owen Logic
email: soft@owen.ru