fi
ОбъектыПоскольку MATLAB не имеет описаний типа, присвоения как A = B
заменяет тип и содержимое A
с типом и содержимым B
. Если A
не существует во время присвоения, MATLAB создает переменную A
и присвоения это тот же тип и значение как B
. Такое присвоение происходит со всеми типами в MATLAB — объектами и встроенными типами одинаково — включая fi
'double'
единственный
int8
uint8
int16
, и т.д.
Например, следующий код перезаписывает значение и int8
тип A
со значением и int16
тип B
:
A = int8(0); B = int16(32767); A = B
A = int16 32767
class(A)
ans = 'int16'
Можно найти полезным бросить данные в другой тип — например, когда вы бросаете данные от аккумулятора до памяти. Существует несколько способов бросить данные в MATLAB. Следующие разделы обеспечивают примеры четырех различных методов:
Кастинг преобразованным в нижний индекс присвоением
Кастинг функцией преобразования
Кастинг с Fixed-Point Designer™ reinterpretcast
функция
Кастинг с cast
Функция
Следующий преобразованный в нижний индекс оператор присваивания сохраняет тип A
и насыщает значение B
к int8
:
A = int8(0); B = int16(32767); A(:) = B
A = int8 127
class(A)
ans = 'int8'
То же самое верно для fi
объекты:
fipref('NumericTypeDisplay', 'short'); A = fi(0, 1, 8, 0); B = fi(32767, 1, 16, 0); A(:) = B
A = 127 numerictype(1,8,0)
Примечание
Для получения дополнительной информации о преобразованных в нижний индекс присвоениях смотрите subsasgn
функция.
Можно преобразовать от одного типа данных до другого при помощи функции преобразования. В этом примере, A
не должен быть предопределен, потому что это перезаписывается.
B = int16(32767); A = int8(B)
A = int8 127
class(A)
ans = 'int8'
То же самое верно для fi
объекты:
B = fi(32767,1,16,0) A = fi(B,1,8,0)
B = 32767 numerictype(1,16,0) A = 127 numerictype(1,8,0)
numerictype
Объект в fi
Функция преобразованияЧасто определенный numerictype
используется во многих местах, и удобно предопределить numerictype
объекты для использования в функциях преобразования. Предопределение этих объектов является хорошей практикой, потому что оно также кладет спецификацию типа данных на одно место.
T8 = numerictype(1,8,0) T16 = numerictype(1,16,0)
T8 = DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 8 FractionLength: 0 T16 = DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 0
B = fi(32767,T16) A = fi(B,T8)
B = 32767 numerictype(1,16,0) A = 127 numerictype(1,8,0)
reinterpretcast
ФункцияМожно преобразовать фиксированную точку и встроенные типы данных, не изменяя базовые данные. Fixed-Point Designer reinterpretcast
функция выполняет этот тип преобразования.
В следующем примере, B
fi
без знака объект с размером слова 8 битов и дробной длиной 5 битов.
reinterpretcast
функция преобразует B
в fi
со знаком объект
A
с размером слова 8 битов и дробной длиной 1 бита. Реальные значения A
и B
отличайтесь, но их бинарные представления являются тем же самым.
B = fi([pi/4 1 pi/2 4],0,8,5) T = numerictype(1,8,1); A = reinterpretcast(B,T)
B = 0.7813 1.0000 1.5625 4.0000 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 8 FractionLength: 5 A = 12.5000 16.0000 25.0000 -64.0000 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 8 FractionLength: 1
Чтобы проверить, что базовые данные не изменились, сравните бинарные представления A
и B
:
binary_B = bin(B) binary_A = bin(A)
binary_B = '00011001 00100000 00110010 10000000' binary_A = '00011001 00100000 00110010 10000000'
Используя cast
функция, можно преобразовать значение переменной к тому же numerictype
, сложность и fimath
как другая переменная.
В следующем примере, a
брошен к типу данных b
. Выход, c
, имеет тот же numerictype
и fimath
свойства как b
, и значение a
.
a = pi; b = fi([],1,16,13,'RoundingMethod','Floor'); c = cast(a,'like',b)
c = 3.1415 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 13 RoundingMethod: Floor OverflowAction: Saturate ProductMode: FullPrecision SumMode: FullPrecision
Используя этот синтаксис позволяет вам задавать типы данных отдельно от вашего алгоритмического кода как описано в Ручных Лучшых практиках Преобразования Фиксированной точки.
cast
| fi
| numerictype
| reinterpretcast
| subsasgn