这个示例展示了如何使用定点数字对象的基础知识gydF4y2BafigydF4y2Ba
.gydF4y2Ba
调用定点数值对象gydF4y2BafigydF4y2Ba
因为J.H.威尔金森用过gydF4y2BafigydF4y2Ba
在他的经典著作《代数过程中的舍入误差》(1963)和《代数特征值问题》(1965)中表示定点计算。gydF4y2Ba
此示例可以使用与当前使用的显示设置或偏好设置。为了确保通过运行此示例不会更改当前的显示设置和首选项,该示例会自动保存并恢复它们。以下代码为示例更改的任何显示设置或属性捕获当前状态。gydF4y2Ba
originalFormat = get (0,gydF4y2Ba'格式'gydF4y2Ba);格式gydF4y2Ba宽松的gydF4y2Ba格式gydF4y2Ba长gydF4y2BaggydF4y2Ba%捕获当前状态并重置FI显示和记录gydF4y2Ba%首选项到出厂设置。gydF4y2Bafiprefatstartofthisexample = get(fipref);重置(FIPREF);gydF4y2Ba
要将定点数据类型分配给具有默认定点参数的数字或变量,请使用gydF4y2BafigydF4y2Ba
构造函数。得到的不动点值称为agydF4y2BafigydF4y2Ba
对象。gydF4y2Ba
例如,下面的创建gydF4y2BafigydF4y2Ba
对象gydF4y2Ba一个gydF4y2Ba
和gydF4y2BabgydF4y2Ba
通过显示的属性,我们可以在构造变量时指定所有这些属性。注意,当gydF4y2BaFractionLength.gydF4y2Ba
未指定属性,它将自动设置为给定的字长度为“最佳精度”,保持值的最高有效位。当gydF4y2Ba字gydF4y2Ba
属性未指定,默认为16位。gydF4y2Ba
一个= fi(π)gydF4y2Ba
a = 3.1416015625 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba
b = fi (0.1)gydF4y2Ba
b = 0.0999984741210938 DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 16 FractionLength: 18gydF4y2Ba
第二个和第三个数值参数指定gydF4y2Ba签署gydF4y2Ba
(gydF4y2Ba真的gydF4y2Ba
或1 =gydF4y2Ba签署gydF4y2Ba
,gydF4y2Ba假gydF4y2Ba
或0 =gydF4y2Ba无符号gydF4y2Ba
),gydF4y2Ba字gydF4y2Ba
分别在比特。gydF4y2Ba
%签署了8位gydF4y2BaA = fi(pi, 1,8)gydF4y2Ba
a = 3.15625 DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 8 FractionLength: 5gydF4y2Ba
的gydF4y2Ba你以后gydF4y2Ba
构造函数也可用于构建签名gydF4y2BafigydF4y2Ba
对象gydF4y2Ba
a1 = sfi(π,8)gydF4y2Ba
a1 = 3.15625 DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 8 FractionLength: 5gydF4y2Ba
%无符号的20位gydF4y2BaB = fi(exp(1), 0, 20))gydF4y2Ba
b = 2.71828079223633 DataTypeMode:定点:二进制点缩放Signedness: Unsigned WordLength: 20 FractionLength: 18gydF4y2Ba
的gydF4y2BaUFI.gydF4y2Ba
构造函数可用于构造无符号gydF4y2BafigydF4y2Ba
对象gydF4y2Ba
B1 = ufi(exp(1), 20))gydF4y2Ba
b1 = 2.71828079223633 DataTypeMode: Fixed-point: binary point scaling signness: Unsigned WordLength: 20 FractionLength: 18 . b1 = 2.71828079223633 DataTypeMode: Fixed-point: binary point scalinggydF4y2Ba
数据存储在内部,以指定的精度高。但是,重要的是要意识到使用双重精度浮点变量初始化高精度定点变量可能不会为您提供乍一看可能期望的分辨率。例如,让我们初始化0.1的无符号100位固定点变量,然后检查其二进制扩展:gydF4y2Ba
A = ufi(0.1, 100);gydF4y2Ba
本(一)gydF4y2Ba
ans = ' 1100110011001100110011001100110011001100110011001101000000000000000000000000000000000000000000000000 'gydF4y2Ba
请注意,0.1的无限重复二进制扩展在第52位被截断(事实上,第53位是重要的,它被舍入到第52位)。这是因为双精度浮点变量(默认的MATLAB®数据类型)以64位浮点格式存储,1位表示符号,11位表示指数,52位表示尾数,加上1个“隐藏”位,有效的53位精度。尽管双精度浮点的范围非常大,但其精度仅限于53位。关于浮点运算的更多信息,请参阅Cleve Moler的书,数值计算与MATLAB的第一章。pdf版本可在此浏览:gydF4y2Ba//www.tianjin-qmedu.com/company/aboutus/founders/clevemoler.html.gydF4y2Ba
那么,为什么要比浮点更精确呢?因为大多数定点处理器以较小的精度存储数据,然后以较大的精度进行计算。例如,让我们初始化一个40位unsigned对象gydF4y2BafigydF4y2Ba
对产品进行全精度乘法。s manbetx 845gydF4y2Ba
请注意,40位操作数的全精度乘积是80位,这比标准的双精度浮点精度更高。gydF4y2Ba
A = fi(0.1, 0, 40);本(一)gydF4y2Ba
ans = ' 1100110011001100110011001100110011001101 'gydF4y2Ba
b = a * agydF4y2Ba
b = 0.010000000000000045数据模式:固定点:二进制点缩放签名:无符号WordLength:80 FractionLength:86gydF4y2Ba
本(b)gydF4y2Ba
ANS ='1010001111010111001011100011010101100001010001011100001010001011100001010001010111001010001010111000010100011101010111001011101010111001011101010111001011101010111001011101010111001011101010111000010111010101110010111010101110000101110101011100101001001gydF4y2Ba
可以通过多种方式访问数据,这些方式映射到内置数据类型和二进制字符串。例如,gydF4y2Ba
a = fi(pi);双(a)gydF4y2Ba
ans = 3.1416015625.gydF4y2Ba
的双精度浮点“真实世界”值gydF4y2Ba一个gydF4y2Ba
,量化为精度gydF4y2Ba一个gydF4y2Ba
.gydF4y2Ba
我们还可以在double中设置实际值。gydF4y2Ba
a.double = exp(1)gydF4y2Ba
a = 2.71826171875 DataTypeMode: Fixed-point: binary point scaling Signed: Signed WordLength: 16 FractionLength: 13 . DataTypeMode: Fixed-point: binary point scalinggydF4y2Ba
设置真实世界的价值gydF4y2Ba一个gydF4y2Ba
来gydF4y2BaegydF4y2Ba
,量化gydF4y2Ba一个gydF4y2Ba
数值类型。gydF4y2Ba
storedInteger (a)gydF4y2Ba
Ans = int16 22268gydF4y2Ba
在可用的最小内置的整数类型中返回“存储的整数”,最多可用64位。gydF4y2Ba
在gydF4y2Babinarypoint.gydF4y2Ba
缩放,存储的整数值与实际值之间的关系是gydF4y2Ba
也有gydF4y2BaSlopeBiasgydF4y2Ba
缩放,有关系gydF4y2Ba
在哪里gydF4y2Ba
和gydF4y2Ba
数学运营商gydF4y2BafigydF4y2Ba
合作gydF4y2Babinarypoint.gydF4y2Ba
缩放和实值gydF4y2BaSlopeBiasgydF4y2Ba
缩小了gydF4y2BafigydF4y2Ba
对象。gydF4y2Ba
分别以二进制,八进制,无符号十进制和十六进制字符串返回存储的整数。gydF4y2Ba
本(一)gydF4y2Ba
ans = ' 0101011011111100 'gydF4y2Ba
十月(a)gydF4y2Ba
ans = ' 053374 'gydF4y2Ba
12月(a)gydF4y2Ba
ans = ' 22268 'gydF4y2Ba
十六进制(一个)gydF4y2Ba
ans = ' 56 fc 'gydF4y2Ba
分别从二进制、八进制、无符号十进制和十六进制字符串设置存储的整数。gydF4y2Ba
a.bin =gydF4y2Ba“0110010010001000”gydF4y2Ba
a = 3.1416015625 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba
a.oct =gydF4y2Ba“031707”gydF4y2Ba
a = 1.6180419921875 DataTypeMode: Fixed-point: binary point scaling Signed: Signed WordLength: 16 FractionLength: 13gydF4y2Ba
a.dec =gydF4y2Ba“22268”gydF4y2Ba
a = 2.71826171875 DataTypeMode: Fixed-point: binary point scaling Signed: Signed WordLength: 16 FractionLength: 13 . DataTypeMode: Fixed-point: binary point scalinggydF4y2Ba
a.hex =gydF4y2Ba“0333”gydF4y2Ba
a = 0.0999755859375 DataTypeMode:定点:二进制点缩放符号符号:Signed WordLength: 16 FractionLength: 13gydF4y2Ba
当gydF4y2BaFractionLength.gydF4y2Ba
属性时,将计算为值的大小和给定的字长的最佳精度。的第四个数值参数也可以直接指定分数长度gydF4y2BafigydF4y2Ba
的第三个数字参数gydF4y2Ba你以后gydF4y2Ba
要么gydF4y2BaUFI.gydF4y2Ba
构造函数。在下文中,比较分数长度gydF4y2Ba一个gydF4y2Ba
,将其明确设置为0,到分数长度gydF4y2BabgydF4y2Ba
,这被设置为最佳精度,以获得值的大小。gydF4y2Ba
a = sfi(10,16,0)gydF4y2Ba
a = 10 DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 16 FractionLength: 0gydF4y2Ba
10 b = sfi (16)gydF4y2Ba
b = 10 DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 16 FractionLength: 11gydF4y2Ba
请注意,存储的整数值gydF4y2Ba一个gydF4y2Ba
和gydF4y2BabgydF4y2Ba
是不同的,尽管它们在现实世界中的价值是相同的。这是因为现实世界的价值gydF4y2Ba一个gydF4y2Ba
存储的整数是缩放2 ^ 0 = 1,而实际值gydF4y2BabgydF4y2Ba
存储的整数是2 ^ -11 = 0.00048828125。gydF4y2Ba
storedInteger (a)gydF4y2Ba
ans = int16 10gydF4y2Ba
storedInteger (b)gydF4y2Ba
Ans = int16 20480gydF4y2Ba
到目前为止,我们一直通过将数值参数传递给gydF4y2BafigydF4y2Ba
构造函数。我们还可以通过将属性的名称作为字符串指定属性,然后指定属性,然后指定属性的值:gydF4y2Ba
一个= fi(π,gydF4y2Ba'wordlength'gydF4y2Ba,20)gydF4y2Ba
a = 3.14159393310547数据款:定点:二进制点缩放签名:签名字长:20 fractionLength:17gydF4y2Ba
有关的更多信息gydF4y2BafigydF4y2Ba
属性,类型gydF4y2Ba
帮助gydF4y2BafigydF4y2Ba
要么gydF4y2Ba
医生gydF4y2BafigydF4y2Ba
在MATLAB命令行。gydF4y2Ba
的所有数值类型属性gydF4y2BafigydF4y2Ba
封装在名为gydF4y2Banumerictype.gydF4y2Ba
:gydF4y2Ba
T = numerictypegydF4y2Ba
T = DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 16 FractionLength: 15gydF4y2Ba
数值类型属性可以在创建对象时通过传入参数/值参数进行修改gydF4y2Ba
T = numerictype (gydF4y2Ba'wordlength'gydF4y2Ba,40,gydF4y2Ba“FractionLength”gydF4y2Ba37)gydF4y2Ba
T = DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 40 FractionLength: 37gydF4y2Ba
也可以用点符号来赋值gydF4y2Ba
T.Signed = falsegydF4y2Ba
T = DataTypeMode:定点:二进制点缩放Signedness: Unsigned WordLength: 40 FractionLength: 37gydF4y2Ba
a的所有数字类型属性gydF4y2BafigydF4y2Ba
可以通过通过gydF4y2Banumerictype.gydF4y2Ba
对象。例如,当创建多个时,这很方便gydF4y2BafigydF4y2Ba
共享相同数字类型的。gydF4y2Ba
一个= fi(π,gydF4y2Ba'numerictype'gydF4y2Ba,t)gydF4y2Ba
a = 3.14159265359194 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 40 FractionLength: 37gydF4y2Ba
b = fi (exp (1),gydF4y2Ba'numerictype'gydF4y2Ba,t)gydF4y2Ba
b = 2.71828182845638 DataTypeMode: Fixed-point: binary point scaling signed: Unsigned WordLength: 40 FractionLength: 37gydF4y2Ba
的gydF4y2Banumerictype.gydF4y2Ba
对象也可以直接传递给gydF4y2BafigydF4y2Ba
构造函数gydF4y2Ba
a1 = fi(π,T)gydF4y2Ba
a1 = 3.14159265359194 DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 40 FractionLength: 37gydF4y2Ba
有关的更多信息gydF4y2Banumerictype.gydF4y2Ba
属性,类型gydF4y2Ba
帮助gydF4y2Banumerictype.gydF4y2Ba
要么gydF4y2Ba
医生gydF4y2Banumerictype.gydF4y2Ba
在MATLAB命令行。gydF4y2Ba
的显示首选项gydF4y2BafigydF4y2Ba
可以用gydF4y2BafiprefgydF4y2Ba
对象。他们可以在Matlab会议之间保存gydF4y2BasavefiprefgydF4y2Ba
命令。gydF4y2Ba
显示真实世界的值时,将显示最接近的双精度浮点值。正如我们所看到的,双精度浮点可能并不总是能够代表高精度定点号的确切值。例如,8比特分数数可以完全表示在双打中gydF4y2Ba
一个= sfi(1、8、7)gydF4y2Ba
A = 0.9921875数据码码:固定点:二进制点缩放签名:签名WordLength:8 FractionLength:7gydF4y2Ba
本(一)gydF4y2Ba
ans = ' 01111111 'gydF4y2Ba
而100位的小数不能(当精确值是1 - 2^-99时,显示1):gydF4y2Ba
b = sfi (1100, 99)gydF4y2Ba
b = 1 DataTypeMode:定点:二进制点缩放Signedness: 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
重置fi显示和记录首选项gydF4y2Bafipref (fiprefAtStartOfThisExample);集(0,gydF4y2Ba'格式'gydF4y2Ba, originalFormat);gydF4y2Ba% #好< * NOPTS, * NASGU >gydF4y2Ba