exponenta event banner

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 собственность. ExponentBias для типа данных с плавающей запятой вычисляется с помощью следующего уравнения:

Степень смещения = 2e-1-1(1)
где e представляет собой ExponentLength.

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

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

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

WordLength = 1 + MantissaLength + ExponentLength(2)

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

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

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

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

WordLength = 1 + MantissaLength + ExponentLength(3)

Примечание

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

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

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

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

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 конструктор был двойным, тип данных 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