主要内容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通过显示的属性,我们可以在构造变量时指定所有这些属性。注意,当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

指定签名和WordLength属性gydF4y2Ba

第二个和第三个数值参数指定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

精度gydF4y2Ba

数据存储在内部,以指定的精度高。但是,重要的是要意识到使用双重精度浮点变量初始化高精度定点变量可能不会为您提供乍一看可能期望的分辨率。例如,让我们初始化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

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

双(一个)gydF4y2Ba

a = fi(pi);双(a)gydF4y2Ba
ans = 3.1416015625.gydF4y2Ba

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

A.DOUBLE =…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

storedInteger (a)gydF4y2Ba
Ans = int16 22268gydF4y2Ba

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

存储整数值与真实值的关系gydF4y2Ba

在gydF4y2Babinarypoint.gydF4y2Ba缩放,存储的整数值与实际值之间的关系是gydF4y2Ba

$$ mbox{实际值}= ((mbox{Stored integer})\cdot
gydF4y2Ba

也有gydF4y2BaSlopeBiasgydF4y2Ba缩放,有关系gydF4y2Ba

$$ mbox{实际值}= (mbox{Stored integer})\cdot
gydF4y2Ba

在哪里gydF4y2Ba

$$ mbox{Slope} = ((mbox{Slope adjustment factor}))\cdot
gydF4y2Ba

和gydF4y2Ba

$$ \ mbox {固定指数} =  -  \ mbox {fraction length}。$$gydF4y2Ba

数学运营商gydF4y2BafigydF4y2Ba合作gydF4y2Babinarypoint.gydF4y2Ba缩放和实值gydF4y2BaSlopeBiasgydF4y2Ba缩小了gydF4y2BafigydF4y2Ba对象。gydF4y2Ba

箱(a),10月(a),dec(a),十六进制(a)gydF4y2Ba

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

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

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

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

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

a.bin =gydF4y2Ba“0110010010001000”gydF4y2Ba
a = 3.1416015625 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 13gydF4y2Ba

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

a.oct =gydF4y2Ba“031707”gydF4y2Ba
a = 1.6180419921875 DataTypeMode: Fixed-point: binary point scaling Signed: Signed WordLength: 16 FractionLength: 13gydF4y2Ba

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

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

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

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

指定FractionLengthgydF4y2Ba

当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

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

到目前为止,我们一直通过将数值参数传递给gydF4y2BafigydF4y2Ba构造函数。我们还可以通过将属性的名称作为字符串指定属性,然后指定属性,然后指定属性的值:gydF4y2Ba

一个= fi(π,gydF4y2Ba'wordlength'gydF4y2Ba,20)gydF4y2Ba
a = 3.14159393310547数据款:定点:二进制点缩放签名:签名字长:20 fractionLength:17gydF4y2Ba

有关的更多信息gydF4y2BafigydF4y2Ba属性,类型gydF4y2Ba

帮助gydF4y2BafigydF4y2Ba

要么gydF4y2Ba

医生gydF4y2BafigydF4y2Ba

在MATLAB命令行。gydF4y2Ba

数值类型属性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

显示偏好gydF4y2Ba

的显示首选项gydF4y2BafigydF4y2Ba可以用gydF4y2BafiprefgydF4y2Ba对象。他们可以在Matlab会议之间保存gydF4y2BasavefiprefgydF4y2Ba命令。gydF4y2Ba

真实世界价值的显示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

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

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