Main Content

CustomFloat

カスタムの浮動小数点データ型をもつ数値オブジェクト

R2020a 以降

説明

CustomFloat オブジェクトは、指定した語長と仮数部の長さをもつ浮動小数点数値データ型を定義するために使用します。CustomFloat オブジェクトで定義した浮動小数点データ型は IEEE 754-2008 標準に準拠します。浮動小数点データ型の詳細については、浮動小数点数を参照してください。

作成

説明

x = CustomFloat(v) は値 v をもつ CustomFloat オブジェクトを返します。出力オブジェクトの語長、仮数部の長さ、指数部の長さは入力 v と同じです。

x = CustomFloat(v, type) は値 vtype で指定された浮動小数点型をもつ CustomFloat オブジェクトを返します。

x = CustomFloat(v, WordLength, MantissaLength) は指定された語長と仮数部の長さをもつ CustomFloat オブジェクトを返します。

x = CustomFloat(v, WordLength, MantissaLength, 'typecast')v のビット パターンと指定された仮数部の長さをもつ CustomFloat オブジェクトを返します。語長は入力 v の語長と一致しなければなりません。

x = CustomFloat(cf)CustomFloat オブジェクト cf の値とデータ型のプロパティをもつ CustomFloat オブジェクトを返します。

入力引数

すべて展開する

CustomFloat オブジェクトの値。スカラー、ベクトル、行列または多次元配列として指定します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
複素数のサポート: あり

CustomFloat オブジェクトの浮動小数点データ型。'double''single'、または 'half' のいずれかとして指定します。

次の表は、これらの型のプロパティをまとめたものです。

語長仮数部の長さ
double6452
single3223
half1610

データ型: char

カスタムの浮動小数点型。CustomFloat オブジェクトとして指定します。

プロパティ

すべて展開する

指数のオフセット値を表すスカラー整数。

このプロパティを直接変更することはできません。ただし、ExponentLength プロパティに影響を与える WordLength プロパティと MantissaLength プロパティを変更することで、このプロパティを変更できます。浮動小数点データ型の ExponentBias は次の方程式で計算されます。

ExponentBias = 2e-1-1(1)
ここで e は ExponentLength を表します。

データ型: double

指数部を表すビット数。このプロパティを直接編集することはできません。ただし、MantissaLength プロパティと WordLength プロパティを変更することで指数部の長さを変更できます。

ExponentLengthMantissaLength、および WordLength のプロパティの関係は次の方程式で表されます。

WordLength = 1+MantissaLength+ExponentLength(2)

ExponentLength は 31 ビット未満でなければなりません。

データ型: double

仮数部を表すビット数。スカラー整数として指定します。

ExponentLengthMantissaLength、および WordLength のプロパティの関係は次の方程式で表されます。

WordLength = 1+MantissaLength+ExponentLength(3)

メモ

ExponentLength は 31 ビット未満でなければなりません。

例: custfloat.MantissaLength = 14;

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

データ型の総ビット数。スカラー整数として指定します。

ExponentLengthMantissaLength、および 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自然対数
log22 を底とした対数と浮動小数点数分解
log10常用対数 (10 を底とする)
minus減算
mod除算後の剰余 (モジュロ演算)
mtimes行列乗算
ndims配列の次元数
plus数値の加算と string の付加
pow10基数 10 べき乗と半精度数のスケーリング
pow22 を底とする指数と浮動小数点数のスケーリング
power要素単位のべき乗
rdivide配列の右除算
real複素数の実数部
rem除算後の剰余
round最も近い小数または整数への丸め
rsqrt逆数平方根
sqrt平方根
tanh双曲線正接
times乗算
uminus単項マイナス
uplus単項プラス
binfi オブジェクトの格納整数の符号なし 2 進数表現
double倍精度配列
fi固定小数点数値オブジェクトの作成
int88 ビット符号付き整数配列
int1616 ビット符号付き整数配列
int3232 ビット符号付き整数配列
int6464 ビット符号付き整数配列
isnanNaN の配列要素の判別
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 のデータ型も double です。関数 CustomFloat に渡される値が single の場合、結果として得られる 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 の 2 番目の引数としてデータ型を指定します。

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 object. The axes object with title Error: v - double(x), xlabel Mantissa Length, ylabel Error contains an object of type line.

関数 CustomFloat'typecast' 入力引数を使用すると、入力値のビット パターンと指定した語長および仮数部の長さをもつ CustomFloat オブジェクトが作成されます。

単精度の値を定義します。単精度浮動小数点データ型は語長が 32 ビットで仮数部の長さが 23 ビットです。この単精度値の 2 進数表現を確認します。

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 オブジェクトの 2 進数表現を確認し、単精度の入力値のビット パターンと比較します。

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

制限

次の関数はカスタム浮動小数点入力をサポートしていますが、複素数のカスタム浮動小数点入力はサポートされません。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2020a で導入

参考

| |

トピック