Переполнение и потери значимости регистрируются как предупреждения для всего присвоения, плюс, минус, и операции умножения когда fipref
LoggingMode свойство установлено в on. Например, попробуйте следующее:
Создайте fi со знаком объект, который является вектором из значений от 1 до 5 с 8-битным размером слова и 6-битной дробной длиной.
a = fi(1:5,1,8,6);
Задайте fimath объект сопоставлен с a, и укажите, что вы зададите сумму и слово продукта и фракционируете длины.
F = a.fimath; F.SumMode = 'SpecifyPrecision'; F.ProductMode = 'SpecifyPrecision'; a.fimath = F;
Задайте fipref возразите и включите логгирование потери значимости и переполнение.
P = fipref;
P.LoggingMode = 'on';Подавите numerictype и fimath отображения.
P.NumericTypeDisplay = 'none'; P.FimathDisplay = 'none';
Задайте сумму и слово продукта и дробные длины.
a.SumWordLength = 16; a.SumFractionLength = 15; a.ProductWordLength = 16; a.ProductFractionLength = 15;
Предупреждения выведены для переполнения и потерь значимости в операциях присвоения. Например, попробуйте:
a(1) = pi
Warning: 1 overflow(s) occurred in the fi assignment operation.
a =
1.9844 1.9844 1.9844 1.9844 1.9844a(1) = double(eps(a))/10
Warning: 1 underflow(s) occurred in the fi assignment operation.
a =
0 1.9844 1.9844 1.9844 1.9844Предупреждения выведены для переполнения и потерь значимости, кроме того, и операций вычитания. Например, попробуйте:
a+a
Warning: 12 overflow(s) occurred in the fi + operation.
> In + (line 24)
ans =
0 1.0000 1.0000 1.0000 1.0000a-a
Warning: 8 overflow(s) occurred in the fi - operation.
> In - (line 24)
ans =
0 0 0 0 0Предупреждения выведены для переполнения и потерь значимости в операциях умножения. Например, попробуйте:
a.*a
Warning: 4 product overflow(s) occurred in the fi .* operation.
> In .* (line 24)
ans =
0 1.0000 1.0000 1.0000 1.0000a*a'
Warning: 4 product overflow(s) occurred in the fi * operation.
> In * (line 25)
Warning: 3 sum overflow(s) occurred in the fi * operation.
> In * (line 25)
ans =
1.0000Итоговым примером выше является комплексное умножение, которое требует и умножения и операций сложения. Предупреждения сообщают вам о переполнении и потерях значимости в обоих.
Поскольку переполнение и потери значимости регистрируются как предупреждения, можно использовать dbstop Функция MATLAB® с синтаксисом
dbstop if warning
найти точные линии в файле, которые вызывают переполнение или потери значимости.
Использование
dbstop if warning fi:underflow
остановиться только на линиях, которые вызывают потерю значимости. Использование
dbstop if warning fi:overflow
остановиться только на линиях, которые вызывают переполнение.
Когда fipref
LoggingMode свойство установлено в on, можно использовать следующие функции, чтобы возвратить регистрируемую информацию о присвоении и операциях создания к командной строке MATLAB:
maxlog — Возвращает максимальное реальное значение
minlog — Возвращает минимальное значение
noverflows — Возвращает количество переполнения
nunderflows — Возвращает количество потерь значимости
LoggingMode должен быть установлен в on прежде чем вы выполните любую операцию для того, чтобы регистрировать информацию об этом. Чтобы очистить журнал, используйте функцию resetlog.
Например, рассмотрите следующее. Сначала станьте входящими в систему, затем выполните операции, и затем наконец получите информацию об операциях:
fipref('LoggingMode','on'); x = fi([-1.5 eps 0.5], true, 16, 15); x(1) = 3.0;
maxlog(x)
ans =
1.0000minlog(x)
ans =
-1noverflows(x)
ans =
2nunderflows(x)
ans =
1 Затем сбросьте журнал и запросите ту же информацию снова. Обратите внимание на то, что функции возвращают пустой [], потому что логгирование было сброшено, поскольку операции были запущены:
resetlog(x)
maxlog(x)
Warning: Logging is turned on in 'maxlog'. However, no values have been logged for this variable yet.
ans =
[]minlog(x)
Warning: Logging is turned on in 'minlog'. However, no values have been logged for this variable yet.
ans =
[]noverflows(x)
Warning: Logging is turned on in 'noverflows'. However, no values have been logged for this variable yet.
ans =
[]nunderflows(x)
Warning: Logging is turned on in 'nunderflows'. However, no values have been logged for this variable yet.
ans =
[]