Переполнения и переполнения регистрируются как предупреждения для всех операций назначения, плюс, минус и умножения, когда 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.9844
a(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.0000
a-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.0000
a*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.0000
minlog(x)
ans = -1
noverflows(x)
ans = 2
nunderflows(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 = []