[an error occurred while processing this directive]
|
Пусть у вас разрядная сетка имеет всего 4 разряда. Возьмём максимальное положительное число 0b0111 (0х7) и умножим на него же 0b0111 (0х7). В соответствии с теорией результат расширится до 8 разрядов: 0011'0001 (0х7 * 0х7 = 0х31).
Теперь увеличим разрядную сетку до 32 разрядов и проделаем то же самое. 0х7000'0000 * 0х7000'0000 = 0х3100'0000'0000'0000. Как видите, пока все честно и получен правильный результат с 64-мя разрядами.
До сих пор были просто целые числа со знаком. Теперь давайте поработаем с фиксированной точкой. Возьмем такое число 0.111, перемножим его на само себя 0.111 и получим результат 00.11'0001. Как видите, положение фиксточки сдвинулось! По существу, делается также, как мы привыкли делать в десятичном умножении: получаете целый результат и отсчитываете 6 разрядов справа налево, чтобы поставить фиксированную точку.
Теперь увеличьте разрядную сетку до 32 бит и проверьте результат. Вы увидите, что если фиксированная точка в сножителях стояла после 15 бита, то в произведении она будет стоять после 30-знака. А не после 31, как вам бы хотелось.
Во фракшионл моде произведение сдвигается влево на один бит автоматически. Возможно, в мотороле этот режим был включен, а в 28хх такого режима нет.