Бросьте fi Объекты

Перезапись присвоением

Поскольку MATLAB не имеет описаний типа, присвоения как A = B заменяет тип и содержимое A с типом и содержимым B. Если A не существует во время присвоения, MATLAB создает переменную A и присвоения это тот же тип и значение как B. Такое присвоение происходит со всеми типами в MATLAB — объектами и встроенными типами одинаково — включая fi'double'единственныйint8uint8int16, и т.д.

Например, следующий код перезаписывает значение и int8 тип A со значением и int16 тип B:

A = int8(0);
B = int16(32767);
A = B 
A =

  int16

   32767
class(A)
ans =

    'int16'

Способы бросить с программным обеспечением MATLAB

Можно найти полезным бросить данные в другой тип — например, когда вы бросаете данные от аккумулятора до памяти. Существует несколько способов бросить данные в 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

Используя этот синтаксис позволяет вам задавать типы данных отдельно от вашего алгоритмического кода как описано в Ручных Лучшых практиках Преобразования Фиксированной точки.

Смотрите также

| | | |