CustomFloat

Численный объект с пользовательским типом данных с плавающей точкой

Описание

Использование CustomFloat объект для определения типа числовых данных с плавающей точкой с заданными размером слова и длиной мантиссы. Типы данных с плавающей точкой, заданные CustomFloat объект соответствует стандарту IEEE 754-2008. Для получения дополнительной информации о типах данных с плавающей точкой см. Раздел Чисел с плавающей запятой».

Создание

Описание

пример

x = CustomFloat(v) возвращает CustomFloat объект со значением v. Выходной объект имеет тот же размер слова, длину мантиссы и длину экспоненты, что и вход v.

пример

x = CustomFloat(v, type) возвращает CustomFloat объект со значением v и тип с плавающей точкой, заданный type.

пример

x = CustomFloat(v, WordLength, MantissaLength) возвращает CustomFloat объект с заданным размером слова и длиной мантиссы.

пример

x = CustomFloat(v, WordLength, MantissaLength, 'typecast') возвращает CustomFloat объект с битовым шаблоном v и заданную длину мантиссы. Значение размера слова должно совпадать с размером слова входа v.

x = CustomFloat(cf) возвращает CustomFloat объект с значением и данными типами свойств CustomFloat cf объекта.

Входные параметры

расширить все

Значение CustomFloat объект, заданный как скалярный, векторный, матричный или многомерный массив.

Типы данных: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного числа: Да

Тип данных с плавающей точкой CustomFloat объект, заданный как 'double', 'single', или 'half'.

Свойства этих типов суммированы в следующей таблице.

НапечататьРазмер словаДлина мантиссы
double6452
single3223
half1610

Типы данных: char

Пользовательский тип с плавающей точкой, заданный как CustomFloat объект.

Свойства

расширить все

Скалярное целое число, представляющее значение смещения для экспоненты.

Это свойство не может быть изменено непосредственно, однако вы можете изменить это свойство, изменив WordLength и MantissaLength свойства, которые влияют на ExponentLength свойство. The ExponentBias для типа данных с плавающей точкой вычисляется следующим уравнением:

ExponentBias = 2e-1-1(1)
где e представляет ExponentLength.

Типы данных: double

Количество бит, представляющих экспоненту. Вы не можете редактировать это свойство непосредственно, однако можно изменить длину экспоненты, изменив MantissaLength и WordLength свойства.

The ExponentLength, MantissaLength, и WordLength свойства связаны посредством следующего уравнения:

WordLength = 1 + MantissaLength + ExponentLength(2)

ExponentLength должно быть менее 31 бита.

Типы данных: double

Количество бит, представляющих мантиссу, заданное в виде скалярного целого числа.

The ExponentLength, MantissaLength, и WordLength свойства связаны посредством следующего уравнения.

WordLength = 1 + MantissaLength + ExponentLength(3)

Примечание

ExponentLength должно быть менее 31 бита.

Пример: custfloat.MantissaLength = 14;

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

Общее количество бит в типе данных, заданное в виде скалярного целого числа.

The ExponentLength, MantissaLength, и WordLength свойства связаны посредством следующего уравнения.

WordLength = 1 + MantissaLength + ExponentLength(4)

Примечание

ExponentLength должно быть менее 31 бита.

Пример: custfloat.WordLength = 28;

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

Функции объекта

расширить все

absАбсолютное значение и комплексная амплитуда
ceilОкруглить к положительной бесконечности
complexСоздайте комплексный массив
conjКомплексный сопряженный
coshГиперболический косинус
expЭкспоненциал
fixОкруглить к нулю
floorОкруглить к отрицательной бесконечности
fmaУмножьте и добавьте, используя слитый подход умножения сложения
hypotКвадратный корень из суммы квадратов (гипотенуза)
ldivideЛевое деление массива
logЕстественный логарифм
log2Логарифмическое рассечение базы 2 и числа с плавающей запятой
log10Общий логарифм (база 10)
minusВычитание
modОстаток после деления (по операции с модулем)
mtimesМатричное умножение
ndimsКоличество измерений массива
plusДобавьте числа, добавьте строки
pow10Основание 10 степени и шкала половинной точности чисел
pow2Базовая 2 степень и шкала чисел с плавающей запятой
powerПоэлементная степень
rdivideПравый массив
realДействительная часть комплексного числа
remОстаток после деления
roundОкруглить до ближайшего десятичного или целого числа
rsqrtОбратный квадратный корень
sqrtКвадратный корень
tanhГиперболический тангенс
timesУмножение
uminusУнарный минус
uplusУнарный плюс
binБеззнаковое двоичное представление сохраненного целого числа fi объект
doubleМассивы с двойной точностью
fiСоздайте численный объект с фиксированной точкой
int88-битные целочисленные массивы со знаком
int1616-битные целочисленные массивы со знаком
int3232-битные целочисленные массивы со знаком
int6464-разрядные целочисленные массивы со знаком
isnanОпределите, какие элементы массива являются NaN
isrealОпределите, использует ли массив сложное хранилище
singleМассивы с одной точностью
uint88-битные массивы беззнаковых целых чисел
uint1616-битные массивы беззнаковых целых чисел
uint3232-битные массивы беззнаковых целых чисел
uint6464-разрядные массивы беззнаковых целых чисел
eqОпределите равенство
geОпределите, больше или равно
gtОпределите больше
leОпределите, меньше чем или равно
ltОпределите меньше
neОпределите неравенство
catКонкатенация массивов
ctransposeКомплексная сопряженная транспозиция
horzcatГоризонтальная конкатенация для разнородных массивов
isfiniteОпределите, какие элементы массива являются конечными
isinfОпределите, какие элементы массива бесконечны
normВекторные и матричные нормы
numelКоличество элементов массива
reshapeПерестроить массив
sizeРазмер массива
transposeТранспонирование вектора или матрицы
vertcatВертикальная конкатенация для разнородных массивов
dispОтобразите значение переменной

Примеры

свернуть все

В этом примере показано, как создать CustomFloat объект.

v = pi;
x = CustomFloat(v)
x = 
    3.1416


           Data Type: Floating-point: Double-precision
          WordLength:  64
      MantissaLength:  52
      ExponentLength:  11
        ExponentBias: 1023

Потому что вход в CustomFloat конструктор был double, тип данных CustomFloat объект, x, также двойной. Если значение передано в CustomFloat функция является одной, тогда получившаяся CustomFloat объект также будет иметь тип данных с одной точностью с плавающей точкой.

v = single(pi);
x = CustomFloat(v)
x = 
    3.1416


           Data Type: Floating-point: Single-precision
          WordLength:  32
      MantissaLength:  23
      ExponentLength:   8
        ExponentBias: 127

Как создать CustomFloat объект с заданным типом данных с плавающей точкой, укажите тип данных как второй аргумент в CustomFloat функция.

v = pi;
x = CustomFloat(v,'half')
x = 
    3.1406


           Data Type: Floating-point: Half-precision
          WordLength:  16
      MantissaLength:  10
      ExponentLength:   5
        ExponentBias:  15

Задайте размер слова и длину мантиссы в CustomFloat функция.

v = pi;
wl = 16;
ml = 4;
x = CustomFloat(v,wl,ml)
x = 
    3.1250


           Data Type: Floating-point: Custom-precision
          WordLength:  16
      MantissaLength:   4
      ExponentLength:  11
        ExponentBias: 1023

Сравните различие между значением двойной точности и значением CustomFloat объект при изменении длины мантиссы.

err = zeros(1,12);
for ml = 1:12
    x = CustomFloat(v,wl,ml);
    err(ml) = v-double(x);    
end

plot(err);
title('Error: v - double(x)');
ylabel('Error');
xlabel('Mantissa Length');

Figure contains an axes. The axes with title Error: v - double(x) contains an object of type line.

Использование 'typecast' входной параметр, CustomFloat функция создает CustomFloat объект с битовым шаблоном входного значения и заданным размером слова и длиной мантиссы.

Задайте значение с одной точностью. Типы данных с одной точностью с плавающей точкой имеют 32-битный размер слова и 23-битную длину мантиссы. Просмотрите двоичное представление значения одинарной точности.

v = single(pi);
bit_pattern = bin(CustomFloat(v))
bit_pattern = 
'01000000010010010000111111011011'

Задайте CustomFloat объект, который имеет тот же битовый шаблон, что и входное значение, но имеет другую длину мантиссы.

x = CustomFloat(v, 32, 20, 'typecast')
x = 
   50.1239


           Data Type: Floating-point: Custom-precision
          WordLength:  32
      MantissaLength:  20
      ExponentLength:  11
        ExponentBias: 1023

Просмотрите двоичное представление CustomFloat объект и сравните его с битовым шаблоном значения одинарной точности входа.

bit_pattern2 = bin(x)
bit_pattern2 = 
'01000000010010010000111111011011'
same = strcmp(bit_pattern, bit_pattern2)
same = logical
   1

Ограничения

Следующие функции, поддерживающие пользовательские входы с плавающей точкой, не поддерживают сложные пользовательские входы с плавающей точкой.

Введенный в R2020a