divide
2 つの fi
オブジェクトの除算
説明
例
2 つの fi オブジェクトの除算
この例では、divide
関数の精度を制御する方法を説明します。
表現の先行する 1 を最上位ビットに配置する、語長 80 ビット、スケーリング 2^-83 の符号なし fi
オブジェクトを作成します。値 0.1 でオブジェクトを初期化し、2 進数表現を確認します。
P = fipref('NumberDisplay', 'bin',... 'NumericTypeDisplay', 'short',... 'FimathDisplay', 'none'); a = fi(0.1, 0, 80, 83)
a = 11001100110011001100110011001100110011001100110011010000000000000000000000000000 numerictype(0,80,83)
IEEE® 標準の倍精度浮動小数点数の仮数は 52 ビットであるため、無限に繰り返す表現は、52 ビットの後切り捨てられます。
上記を、上記と同じ数値型に設定された商を使用した、固定小数点演算での 1/10 の計算と比較します。
T = numerictype('Signed', false,... 'WordLength', 80,... 'FractionLength', 83); a = fi(1); b = fi(10); c = divide(T, a, b); c.bin
ans = '11001100110011001100110011001100110011001100110011001100110011001100110011001101'
関数 divide
を使用した場合、a
および b
の精度に関係なく、商は完全に 80 ビットまで計算されます。このため、fi
オブジェクト c
は、IEEE® 標準の倍精度浮動小数点数が表現できるよりも、正確に 1/10 を表現します。
入力引数
T
— 出力の数値型
numerictype
オブジェクト
出力の数値型。numerictype
オブジェクトとして指定します。
a
— 分子
スカラー | ベクトル | 行列 | 多次元配列
分子。スカラー、ベクトル、行列または多次元配列として指定します。
入力 a
と b
は、同じサイズであるか、互換性のあるサイズでなければなりません。詳細については、基本的な演算で互換性のある配列サイズを参照してください。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| fi
複素数のサポート: あり
b
— 分母
スカラー | ベクトル | 行列 | 多次元配列
分母。実数のスカラー、ベクトル、行列または多次元配列として指定します。
入力 a
と b
は、同じサイズであるか、互換性のあるサイズでなければなりません。詳細については、基本的な演算で互換性のある配列サイズを参照してください。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| fi
複素数のサポート: あり
出力引数
c
— 商
スカラー | ベクトル | 行列 | 多次元配列
解。スカラー、ベクトル、行列または多次元配列として返されます。
c
のサイズは a
と b
の次元の暗黙的な拡張で決まります。詳細については、基本的な演算で互換性のある配列サイズを参照してください。
アルゴリズム
a
および b
が両方とも fi
オブジェクトである場合、c
は、a
と同じ fimath
オブジェクトをもちます。c
が fi
の Fixed
データ型をもち、入力のどちらか一方が fi
浮動小数点データ型をもつ場合、fi
の浮動小数点は固定小数点値に変換されます。中間量は、a
の fimath
オブジェクトを使用して計算されます。
a
、b
のいずれかが fi
オブジェクトで、他方が MATLAB® の組み込み数値型の場合、その組み込みオブジェクトは最高精度の小数部の長さを維持したままで fi
オブジェクトの語長にキャストされます。中間量は、入力 fi
オブジェクトの fimath
オブジェクトを使用して計算されます。
a
および b
が両方とも MATLAB の組み込み double である場合、c
は浮動小数点の商 a./b
であり、numerictype
T
は無視されます。
データ型の伝播ルール
Fixed-Point Designer™ ソフトウェアが numerictype
オブジェクト T
を使用するための構文の場合、関数 divide
は、下の表のデータ型の伝播に関する規則に従います。多くの場合、浮動小数点データ型は伝播されます。このため、固定小数点と浮動小数点の両方の入力に使用できるコードを書くことができます。
入力 fi オブジェクト a および b のデータ型 | numerictype オブジェクト T のデータ型 | 出力 c のデータ型 | |
---|---|---|---|
組み込み | 組み込み | 任意 | 組み込み |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| fi single |
|
|
|
|
|
|
|
|
|
|
|
|
| 入力 |
|
|
|
|
|
|
|
|
|
|
| 入力 |
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用に関するメモと制限:
fi
以外の入力は定数でなければなりません。つまり、fi
オブジェクトにキャストできるよう、その値がコンパイル時に既知でなければなりません。複素数と虚数の除数はサポートされていません。
コード生成は、構文
T.divide(a,b)
をサポートしません。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
HDL コード生成では、除数は定数かつ 2 のべき乗でなければなりません。
fi
以外の入力は定数でなければなりません。つまり、その値がfi
オブジェクトにキャストできるように、コンパイル時に既知にしなければなりません。複素数と虚数の除数はサポートされていません。
MATLAB でのコード生成では、構文
T.divide(a,b)
はサポートされていません。
バージョン履歴
R2006a より前に導入R2022a: 暗黙的な拡張の変更は演算子の引数に影響
R2022a から fi
の divide
に対する暗黙的な拡張が追加されたことにより、それまで基本演算でエラーを返していた一部の引数の組み合わせで結果が出力されるようになりました。
コードで要素単位の演算子を使用し、以前 MATLAB の返していたサイズの不一致エラーに依存している場合 (特に try/catch
ブロック内)、コードは今後、これらのエラーをキャッチしなくなることがあります。
基本的な配列演算に必要な入力サイズの詳細については、基本的な演算で互換性のある配列サイズを参照してください。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)