Блок Умножения¶
Описание: Блок функции «Умножение» производит арифметическую операцию умножения (деления) со значениями, поданными на входы. Тип операции задается для каждого входа отдельно, путем изменения свойств соответствующей входу ножки. Операция выглядит как: числитель - 1 умножить на произведение всех значений на входах со знаком операции «*», знаменатель - 1 умножить на произведение всех значений на входах со знаком операции «/».
Примечание: тип операции задается в свойствах «ножки» входа блока.
Пример:
- (1*10*2)/1 = 10*2 = 20;
- (1*2)/(1*10) = 2/10 = 0,2;
- (1*10)/(1*2) = 10/2 = 5;
- 1/(1*10*2) = 1/20 = 0,05:
Свойства блока: (ПКМ по блоку - Свойства ( Alt + P ))
Общие свойства: см. Редактирование свойств блока.
Тип данных: допускаются любые типы данных из предложенных.
Количество входов: в данном пункте предоставляется возможность изменения количества входов соответствующего блока.
Показывать выход переполнения: управляет наличием выхода of
, который выдает логический признак возникновения переполнения. Это свойство не влияет на выполнение операций устройством. Выход of
рекомендуется использовать для выполнения специально запрограммированных действий при переполнении.
Обработка переполнения: при выполнении операции выполняется проверка на переполнение выхода, т.е. результирующего значения за диапазон значений выбранного типа данных. В такой ситуации рассчитанное значение не может быть верным математически.
Существуют следующие способы обработки переполнения:
- «Игнорировать» - выход получает только младшие биты данных от полученного результата. Не рекомендуется использовать, за исключением реализации циклических счетчиков, когда переход счетчика через максимальное значение в 0 специально нужен, или когда старшие биты значения не нужны, достаточно младших битов.
- «Установить 0» - выход устанавливается в 0. Рекомендуется использовать при использовании значения 0 как признак аварии;
- «Выставить граничное значение» - выход получает значение, ближайшее к истинному значению, на границе диапазона значений выбранного типа данных. Это наиболее логически правильный и рекомендуемый способ, особенно для значений, суммируемых за некоторое время работы устройства;
- «Настройки проекта» - ссылка на один из первых трех способов, указанный в настройках проекта. Эта опция позволяет централизованно управлять этим свойством.
При наличии нескольких операций в одном блоке, т.е. более чем 2 входов – ситуация переполнения последовательно анализируется при выполнении операций:
- выход
of
равен 0, если переполнения нет при выполнении всех операций (на выходе математически правильное значение), иначе устанавливается 1; - при 2 и 3 способе обработки при возникновении переполнения блок пропускает выполнение следующих операций, т.к. все биты, в т.ч. младшие, приняли математически неправильные значения. Поэтому при пропуске следующих операций в 3 способе обработки и возникновении ситуации переполнения несколько раз в разные стороны (например, сначала вверх, затем вниз) выдаваемое значение будет соответствовать первой по порядку ситуации переполнения;
- при 1 способе обработки при возникновении переполнения блок продолжает выполнение следующих операций. При выполнении вычитания первого входа значение вычитается из 0, блок выполняет на одну операцию больше в сравнении со сложением первого входа. При этом вычитании также обрабатывается переполнение.
Внимание: при 2 и 3 способе обработки переполнения, в случае возникновения переполнения, результат зависит от порядка выполнения операций, т.е. подключение входов в другом порядке приводит к изменению результата. В том числе, возможно, что при каком-то варианте подключения переполнение не происходит, а в другом – происходит, при одинаковых входных значениях. Этого можно избежать с помощью выбора в блоке типа данных с большей разрядностью, чем типы данных значений на входах. В таком случае переполнение практически не может случиться (для переполнения потребуется слишком большое количество входов). При использовании типов данных с плавающей запятой вероятность переполнения значительно уменьшается. Но имеются побочные эффекты, которые могут привести к неожиданным результатам.
Следует иметь ввиду:
- при увеличении порядка значения снижается его точность из-за увеличения дискретности, например 4-байтовое число порядка 17000000 имеет дискретность 2, т.е. сложение 1 к нему может не изменить результат!
- обработка младших разрядов, выходящих за предел разрядности, может зависеть от реализации в устройстве. В большинстве устройств вычисления реализуются по стандарту IEEE 754, но это не гарантировано.
Пример выполнения блока для 1-байтового беззнакового
типа данных, значения ограничены диапазоном от 0 до 255:
Способ обработки переполнения |
Операция 1 входа |
Значение 1 входа |
Операция 2 входа |
Значение 2 входа |
Операция 3 входа |
Значение 3 входа |
Выход | Выход of |
Игнорировать | * | 1 | * | 255 | * | 0 | 255 | 0 |
Игнорировать | * | 2 | * | 129 | * | 1 | 4 | 1 |
Игнорировать | * | 128 | * | 128 | * | 3 | 0 | 1 |
Игнорировать | * | 0 | / | 0 | * | 255 | 0 | 1 |
Игнорировать | / | 0 | * | 1 | * | 100 | 0 | 1 |
Игнорировать | / | 1 | * | 1 | * | 100 | 100 | 1 |
Игнорировать | / | 1 | * | 128 | * | 255 | 0 | 1 |
Установить 0 | * | 1 | * | 255 | * | 1 | 255 | 0 |
Установить 0 | * | 2 | * | 200 | * | 0 | 0 | 1 |
Установить 0 | * | 128 | * | 128 | * | 3 | 0 | 1 |
Установить 0 | * | 0 | / | 0 | * | 0 | 0 | 1 |
Установить 0 | / | 0 | * | 1 | * | 100 | 0 | 1 |
Установить 0 | / | 1 | * | 1 | * | 100 | 100 | 0 |
Установить 0 | / | 1 | * | 128 | * | 255 | 0 | 1 |
Граничное значение | * | 1 | * | 255 | * | 1 | 255 | 0 |
Граничное значение | * | 2 | * | 200 | * | 0 | 255 | 1 |
Граничное значение | * | 128 | * | 128 | * | 3 | 255 | 1 |
Граничное значение | * | 0 | / | 0 | * | 0 | 255 | 1 |
Граничное значение | / | 0 | * | 1 | * | 100 | 255 | 1 |
Граничное значение | / | 1 | * | 1 | * | 100 | 100 | 0 |
Граничное значение | / | 1 | / | 128 | * | 255 | 255 | 1 |