主要内容gydF4y2Ba

创建定点数据gydF4y2Ba

这个例子展示了如何使用定点数值对象的基础知识gydF4y2BafigydF4y2Ba.gydF4y2Ba

符号gydF4y2Ba

定点数值对象被调用gydF4y2BafigydF4y2Ba因为J.H.威尔金森用过gydF4y2BafigydF4y2Ba在他的经典著作《代数过程中的舍入误差》(1963年)和《代数特征值问题》(1965年)中表示定点计算。gydF4y2Ba

设置gydF4y2Ba

此示例可能使用与您当前使用的不同的显示设置或首选项。为了确保运行此示例不会更改当前的显示设置和首选项,示例将自动保存并恢复它们。下面的代码捕获示例更改的任何显示设置或属性的当前状态。gydF4y2Ba

originalFormat = get(0,gydF4y2Ba“格式”gydF4y2Ba);格式gydF4y2Ba宽松的gydF4y2Ba格式gydF4y2Ba长gydF4y2BaggydF4y2Ba捕获当前状态并重置fi显示和日志记录gydF4y2Ba%首选项到出厂设置。gydF4y2BafiprefAtStartOfThisExample = get(fipref);重置(fipref);gydF4y2Ba

默认定点属性gydF4y2Ba

要将定点数据类型分配给具有默认定点参数的数字或变量,请使用gydF4y2BafigydF4y2Ba构造函数。得到的定点值称为agydF4y2BafigydF4y2Ba对象。gydF4y2Ba

例如,下面创建gydF4y2BafigydF4y2Ba对象gydF4y2Ba一个gydF4y2Ba和gydF4y2BabgydF4y2Ba使用显示中显示的属性,所有这些属性都可以在构造变量时指定。注意,当gydF4y2BaFractionLengthgydF4y2Ba属性未指定时,它将自动设置为给定单词长度的“最佳精度”,保留值的最高位。当gydF4y2Ba字gydF4y2Ba属性未指定,它默认为16位。gydF4y2Ba

A = fi(pi)gydF4y2Ba
a = 3.1416015625 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba
B = fi(0.1)gydF4y2Ba
b = 0.0999984741210938 DataTypeMode: Fixed-point: binary point scaling signdness: Signed WordLength: 16 FractionLength: 18gydF4y2Ba

指定Signed和WordLength属性gydF4y2Ba

第二个和第三个数字参数指定gydF4y2Ba签署gydF4y2Ba(gydF4y2Ba真正的gydF4y2Ba或1 =gydF4y2Ba签署gydF4y2Ba,gydF4y2Ba假gydF4y2Ba或者0 =gydF4y2Ba无符号gydF4y2Ba),gydF4y2Ba字gydF4y2Ba分别以比特为单位。gydF4y2Ba

% Signed 8-bitgydF4y2BaA = fi(, 1,8)gydF4y2Ba
a = 3.15625 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 8 FractionLength: 5gydF4y2Ba

的gydF4y2Ba你以后gydF4y2Ba构造函数也可以用于构造有符号对象gydF4y2BafigydF4y2Ba对象gydF4y2Ba

A1 = sfi(pi,8)gydF4y2Ba
a1 = 3.15625 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 8 FractionLength: 5gydF4y2Ba
%无符号20位gydF4y2BaB = fi(exp(1), 0,20)gydF4y2Ba
b = 2.71828079223633 DataTypeMode:定点:二进制点缩放signdness: Unsigned WordLength: 20 FractionLength: 18gydF4y2Ba

的gydF4y2BaufigydF4y2Ba构造函数可用于构造unsigned类型gydF4y2BafigydF4y2Ba对象gydF4y2Ba

B1 = ufi(exp(1), 20)gydF4y2Ba
b1 = 2.71828079223633 DataTypeMode:定点:二进制点缩放signdness: Unsigned WordLength: 20 FractionLength: 18gydF4y2Ba

精度gydF4y2Ba

数据存储在内部,与指定的精度一样高。然而,重要的是要意识到,使用双精度浮点变量初始化高精度定点变量可能不会给您提供乍一看可能期望的分辨率。例如,让我们用0.1初始化一个无符号的100位定点变量,然后检查它的二进制展开:gydF4y2Ba

A = ufi(0.1, 100);gydF4y2Ba
本(一)gydF4y2Ba
Ans = ' 1100110011001100110011001100110011001100110011001100110011010000000000000000000000000000000000000000000000000000000000000000000000000000 'gydF4y2Ba

注意,0.1的无限重复二进制展开在第52位被截断(事实上,第53位很重要,它被四舍五入到第52位)。这是因为双精度浮点变量(默认的MATLAB®数据类型)以64位浮点格式存储,符号为1位,指数为11位,尾数为52位,加上一个“隐藏”位,有效精度为53位。尽管双精度浮点具有非常大的范围,但其精度仅限于53位。有关浮点运算的更多信息,请参阅Cleve Moler的书《MATLAB数值计算》的第1章。pdf版本可在此找到:gydF4y2Ba//www.tatmou.com/company/aboutus/founders/clevemoler.htmlgydF4y2Ba

为什么要比浮点数更精确呢?因为大多数定点处理器以较小的精度存储数据,然后以较大的精度进行计算。例如,让我们初始化一个40位的unsigned对象gydF4y2BafigydF4y2Ba并倍增采用全精度的产品。下载188bet金宝搏gydF4y2Ba

请注意,40位操作数的全精度积为80位,这比标准的双精度浮点数精度更高。gydF4y2Ba

A = fi(0.1, 0,40);本(一)gydF4y2Ba
Ans = ' 110011001100110011001100110011001100110011001101 'gydF4y2Ba
B = a*agydF4y2Ba
b = 0.0100000000000045 DataTypeMode:定点:二进制点缩放signdness: Unsigned WordLength: 80 FractionLength: 86gydF4y2Ba
本(b)gydF4y2Ba
Ans = '10100011110101110000101000111101011100001111010111000010100011110101110000101001'gydF4y2Ba

访问数据gydF4y2Ba

数据可以通过映射到内置数据类型和二进制字符串的多种方式访问。例如,gydF4y2Ba

双(一个)gydF4y2Ba

A = fi(pi);双(一个)gydF4y2Ba
Ans = 3.1416015625gydF4y2Ba

的双精度浮点“真实”值gydF4y2Ba一个gydF4y2Ba,量化到的精度gydF4y2Ba一个gydF4y2Ba.gydF4y2Ba

A.double =…gydF4y2Ba

我们还可以在double中设置实际值。gydF4y2Ba

A.double = exp(1)gydF4y2Ba
a = 2.71826171875 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba

的实际值gydF4y2Ba一个gydF4y2Ba来gydF4y2BaegydF4y2Ba,量化为gydF4y2Ba一个gydF4y2Ba的数字类型。gydF4y2Ba

STOREDINTEGER (A)gydF4y2Ba

storedInteger (a)gydF4y2Ba
Ans = int16 22268gydF4y2Ba

返回最小内置整数类型的“存储整数”,最多64位。gydF4y2Ba

存储整数值与实际值之间的关系gydF4y2Ba

在gydF4y2BaBinaryPointgydF4y2Ba缩放,存储的整数值与实际值之间的关系为gydF4y2Ba

$$ \mbox{真实值}= (\mbox{存储整数})\cdot
2^{-\mbox{分数长度}}.$$gydF4y2Ba

也有gydF4y2BaSlopeBiasgydF4y2Ba缩放,这是有关系的gydF4y2Ba

$$ \mbox{真实值}= (\mbox{存储整数})\cdot
\mbox{坡度}+ \mbox{偏差}$$gydF4y2Ba

在哪里gydF4y2Ba

$$ \mbox{坡度}= (\mbox{坡度调整因子})\cdot
2^{\mbox{固定指数}}.$$gydF4y2Ba

和gydF4y2Ba

$$\mbox{固定指数}= -\mbox{分数长度}.$$gydF4y2Ba

的数学运算符gydF4y2BafigydF4y2Ba一起工作gydF4y2BaBinaryPointgydF4y2Ba缩放和实值gydF4y2BaSlopeBiasgydF4y2Ba按比例缩小的gydF4y2BafigydF4y2Ba对象。gydF4y2Ba

Bin (a) oct (a) dec (a) hex (a)gydF4y2Ba

分别以二进制、八进制、无符号十进制和十六进制字符串形式返回存储的整数。gydF4y2Ba

本(一)gydF4y2Ba
Ans = '0101011011111100'gydF4y2Ba
10月(a)gydF4y2Ba
Ans = '053374'gydF4y2Ba
12月(a)gydF4y2Ba
Ans = '22268'gydF4y2Ba
十六进制(一个)gydF4y2Ba
Ans = '56fc'gydF4y2Ba

A.bin =…,A.OCT = ..., A.DEC = ..., A.HEX = ...

分别从二进制、八进制、无符号十进制和十六进制字符串中设置存储的整数。gydF4y2Ba

$ $ \ mbox {\ texttt {fi}}(\π)$ $gydF4y2Ba

a.bin =gydF4y2Ba“0110010010001000”gydF4y2Ba
a = 3.1416015625 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba

$ $ \ mbox {\ texttt {fi}}(\φ)$ $gydF4y2Ba

a.oct =gydF4y2Ba“031707”gydF4y2Ba
a = 1.6180419921875 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba

$ $ \ mbox {\ texttt {fi}} (e) $ $gydF4y2Ba

a.dec =gydF4y2Ba“22268”gydF4y2Ba
a = 2.71826171875 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba

$ $ \ mbox {\ texttt {fi}} $ $ (0.1)gydF4y2Ba

a.hex =gydF4y2Ba“0333”gydF4y2Ba
a = 0.0999755859375 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba

指定FractionLengthgydF4y2Ba

当gydF4y2BaFractionLengthgydF4y2Ba属性未指定时,它被计算为值的大小和给定单词长度的最佳精度。类中的第四个数值参数也可以直接指定分数长度gydF4y2BafigydF4y2Ba构造函数中的第三个数值参数gydF4y2Ba你以后gydF4y2Ba或gydF4y2BaufigydF4y2Ba构造函数。在下面,比较的分数长度gydF4y2Ba一个gydF4y2Ba的分数长度,显式设置为0gydF4y2BabgydF4y2Ba,它被设置为数值大小的最佳精度。gydF4y2Ba

A = sfi(10,16,0)gydF4y2Ba
DataTypeMode: Fixed-point: binary point scaling signdness: Signed WordLength: 16 FractionLength: 0gydF4y2Ba
B = sfi(10,16)gydF4y2Ba
DataTypeMode: Fixed-point: binary point scaling . b = 10 DataTypeMode: Fixed-point: binary point scaling . signdness: Signed WordLength: 16 FractionLength: 11gydF4y2Ba

注意存储的整数值gydF4y2Ba一个gydF4y2Ba和gydF4y2BabgydF4y2Ba是不同的,即使它们在现实世界的价值是相同的。这是因为现实世界的价值gydF4y2Ba一个gydF4y2Ba存储的整数是否按2^0 = 1缩放,而真实世界的值是gydF4y2BabgydF4y2Ba存储的整数乘以2^-11 = 0.00048828125。gydF4y2Ba

storedInteger (a)gydF4y2Ba
Ans = int16gydF4y2Ba
storedInteger (b)gydF4y2Ba
Ans = int16 20480gydF4y2Ba

使用参数/值对指定属性gydF4y2Ba

类的参数来指定数值类型属性gydF4y2BafigydF4y2Ba构造函数。我们还可以通过将属性名以字符串形式给出,后跟属性值来指定属性:gydF4y2Ba

A = fi(,gydF4y2Ba“字”gydF4y2Ba, 20)gydF4y2Ba
a = 3.14159393310547 DataTypeMode: Fixed-point: binary point scaling signdness: Signed WordLength: 20 FractionLength: 17gydF4y2Ba

欲知更多有关gydF4y2BafigydF4y2Ba属性,类型gydF4y2Ba

帮助gydF4y2BafigydF4y2Ba

或gydF4y2Ba

医生gydF4y2BafigydF4y2Ba

在MATLAB命令行。gydF4y2Ba

数字类型属性gydF4y2Ba

的所有数值类型属性gydF4y2BafigydF4y2Ba封装在一个名为gydF4y2BanumerictypegydF4y2Ba:gydF4y2Ba

T =数字类型gydF4y2Ba
T = DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 15gydF4y2Ba

数值类型属性可以在创建对象时通过传入参数/值参数进行修改gydF4y2Ba

数字类型(gydF4y2Ba“字”gydF4y2Ba现年40岁的gydF4y2Ba“FractionLength”gydF4y2Ba37)gydF4y2Ba
T = DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 40 FractionLength: 37gydF4y2Ba

或者可以用点符号来赋值gydF4y2Ba

t signed = falsegydF4y2Ba
T = DataTypeMode:定点:二进制点缩放signdness: Unsigned WordLength: 40 FractionLength: 37gydF4y2Ba

的所有数值类型属性gydF4y2BafigydF4y2Ba可以通过传入gydF4y2BanumerictypegydF4y2Ba对象。例如,当创建多个时,这很方便gydF4y2BafigydF4y2Ba共享相同数值类型的对象。gydF4y2Ba

A = fi(,gydF4y2Ba“numerictype”gydF4y2Ba, T)gydF4y2Ba
a = 3.14159265359194 DataTypeMode:定点:二进制点缩放signdness: Unsigned WordLength: 40 FractionLength: 37gydF4y2Ba
B = fi(exp(1),gydF4y2Ba“numerictype”gydF4y2Ba, T)gydF4y2Ba
b = 2.71828182845638 DataTypeMode:定点:二进制点缩放signdness: Unsigned WordLength: 40 FractionLength: 37gydF4y2Ba

的gydF4y2BanumerictypegydF4y2Ba对象也可以直接传递给gydF4y2BafigydF4y2Ba构造函数gydF4y2Ba

a1 = fi(pi,T)gydF4y2Ba
a1 = 3.14159265359194 DataTypeMode:定点:二进制点缩放signdness: Unsigned WordLength: 40 FractionLength: 37gydF4y2Ba

欲知更多有关gydF4y2BanumerictypegydF4y2Ba属性,类型gydF4y2Ba

帮助gydF4y2BanumerictypegydF4y2Ba

或gydF4y2Ba

医生gydF4y2BanumerictypegydF4y2Ba

在MATLAB命令行。gydF4y2Ba

显示偏好gydF4y2Ba

的显示首选项gydF4y2BafigydF4y2Ba可以设置为gydF4y2BafiprefgydF4y2Ba对象。它们可以在MATLAB会话之间保存gydF4y2BasavefiprefgydF4y2Ba命令。gydF4y2Ba

展示真实世界的价值gydF4y2Ba

在显示实际值时,将显示最接近的双精度浮点值。正如我们所看到的,双精度浮点数并不总是能够表示高精度定点数的精确值。例如,一个8位的小数可以精确地用双精度表示gydF4y2Ba

A = sfi(1,8,7)gydF4y2Ba
a = 0.9921875 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 8 FractionLength: 7gydF4y2Ba
本(一)gydF4y2Ba
Ans = '01111111'gydF4y2Ba

而100位的小数则不能(当精确值为1 - 2^-99时显示1):gydF4y2Ba

B = sfi(1100,99)gydF4y2Ba
DataTypeMode: Fixed-point: binary point scaling signdness: Signed WordLength: 100 FractionLength: 99gydF4y2Ba

的内部表示中保留了完整的精度gydF4y2BafigydF4y2Ba

本(b)gydF4y2Ba
ans = ' 0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 'gydF4y2Ba

展示gydF4y2BafigydF4y2Ba对象也受MATLAB的影响gydF4y2Ba格式gydF4y2Ba命令。特别是,在显示实际值时,使用它非常方便gydF4y2Ba

格式gydF4y2Ba长gydF4y2BaggydF4y2Ba

以便尽可能精确地显示出来。gydF4y2Ba

还有其他显示选项可以更简洁地显示数字类型属性,以及控制值的显示(如实际值、二进制、八进制、十进制整数或十六进制)的选项。gydF4y2Ba

有关显示首选项的详细信息,请键入gydF4y2Ba

帮助gydF4y2BafiprefgydF4y2Ba帮助gydF4y2BasavefiprefgydF4y2Ba帮助gydF4y2Ba格式gydF4y2Ba

或gydF4y2Ba

医生gydF4y2BafiprefgydF4y2Ba医生gydF4y2BasavefiprefgydF4y2Ba医生gydF4y2Ba格式gydF4y2Ba

在MATLAB命令行。gydF4y2Ba

清理gydF4y2Ba

下面的代码将示例更改的任何显示设置或首选项设置回其原始状态。gydF4y2Ba

重置fi显示和日志首选项gydF4y2Bafipref (fiprefAtStartOfThisExample);集(0,gydF4y2Ba“格式”gydF4y2Ba, originalFormat);gydF4y2Ba% #好< * NOPTS, * NASGU >gydF4y2Ba