Просмотр полной версии : блок fDIV, деление на 0
Здравствуйте
Блоки DIV, fDIV, деление на 0.
В справке указано, что деление на ноль - дает ноль. И все.
Однако, в fDIV ноль получается только при делении нуля на ноль.
При делении положительного числа на ноль симулятор выдает положительную бесконечность, а прибор - максимальное число.
При делении отрицательного числа на ноль симулятор выдает отрицательная бесконечность, а прибор минимальное число (максимальный минус).
Как-то так...
Вопрос: Почему все это не отображено в справке?
И второй "пинок".
Тут https://owen.ru/forum/showthread.php?t=40401 я поднимал вопрос работы блока преобразования X-B. Справку так и не поправили, хотя и обещали
Хотя в справке и требуется отобразить поведение конкретного компилятора при UB (неопределённом поведении), думаю, что не нужно доводить до появления этого UB, чтобы не испытывать судьбу, после того, как разработчик через время согласится с доводами другого пользователя и изменит поведение - сделав нерабочими часть библиотечных макросов, использующих этот трюк с неявным преобразованием.
Такие вещи как деление на 0 и преобразование типов должны быть описаны в стандарте языка программирования. Мне лень искать, но любопытно - какое поведение требуется, ожидается?
Стараюсь рассматривать подобные ситуации и формировать флаг ошибки входных параметров и останавливать вычисления.
На ST это совсем легко, на FBD чуть сложнее, но тоже возможно - пример ПИД регулятор, из-за ошибочных параметров останавливающий работу с сигнализацией, а также обрабатывающий нулевое значение времени интегрирования (замена всего слагаемого на 0 независимо от свойств деления на 0)
Сам макрос
https://owen.ru/forum/showthread.php?t=25068&page=74&p=430251&viewfull=1#post430251
Скрины с примером обработки ошибочных параметров и с исключением UB при корректном параметре, но приводящем к делению на 0
Итого, поддерживаю позицию с необходимостью описания в справке различных UB, их соответствия стандартам, а также считаю необходимым программисту самостоятельно избегать подобного UB программы.
Королев Кирилл
10.03.2025, 11:31
Здравствуйте
Блоки DIV, fDIV, деление на 0.
В справке указано, что деление на ноль - дает ноль. И все.
Однако, в fDIV ноль получается только при делении нуля на ноль.
При делении положительного числа на ноль симулятор выдает положительную бесконечность, а прибор - максимальное число.
При делении отрицательного числа на ноль симулятор выдает отрицательная бесконечность, а прибор минимальное число (максимальный минус).
Как-то так...
Вопрос: Почему все это не отображено в справке?
И второй "пинок".
Тут https://owen.ru/forum/showthread.php?t=40401 я поднимал вопрос работы блока преобразования X-B. Справку так и не поправили, хотя и обещали
Добрый день.
Описание, действительно, актуально только для блока DIV. Для fDIV изучим вопрос.
По поводу преобразования Х-В - в справке описание обновлено ведь:
82365
Каюсь, по поводу второго пункта был невнимателен. Мельком глянул, и не увидев "разжеванности" для целых и дробных чисел, подумал что правок не было.
И еще в догонку. Обратите внимание на несоответствие размеров прямоугольников в лоджике и в приборе. Писал тут: https://owen.ru/forum/showthread.php?t=40476
Уже три обновления вышло, а у меня в ПР205, по прежнему прямоугольник за рамку текста вылазит.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot