divide
将两个 fi
对象相除
说明
示例
将两个 fi 对象相除
此示例说明如何控制 divide
函数的精度。
创建一个无符号 fi
对象,其字长为 80 位,采用 2^-83 定标,将表示形式的前导 1 放入最高有效位。用值 0.1 初始化该对象,并检查二进制表示。
P = fipref('NumberDisplay', 'bin',... 'NumericTypeDisplay', 'short',... 'FimathDisplay', 'none'); a = fi(0.1, 0, 80, 83)
a = 11001100110011001100110011001100110011001100110011010000000000000000000000000000 numerictype(0,80,83)
请注意,无限重复表示在 52 位后截断,因为 IEEE® 标准双精度浮点数的尾数是 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 内置双精度值,则 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)