创建定点数据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
也有gydF4y2BaSlopeBiasgydF4y2Ba
缩放,这是有关系的gydF4y2Ba
在哪里gydF4y2Ba
和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
a.bin =gydF4y2Ba“0110010010001000”gydF4y2Ba
a = 3.1416015625 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba
a.oct =gydF4y2Ba“031707”gydF4y2Ba
a = 1.6180419921875 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba
a.dec =gydF4y2Ba“22268”gydF4y2Ba
a = 2.71826171875 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba
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