定点仿真.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
定点仿真

C 语言中的定点计算仿真 1 定点计算原理 见王灵光的《定点数运算原理》。 2 定点仿真 2.1 算法原理 2.1.1 程序流程 在 C 语言中,没有直接可以调用的函数来进行定点计算,所以需要自己编 写函数来模拟定点计算。一般来说,我们都是用整数运算来模拟定点运算的,即 C 语言中的int 类型。对于任何一个定点程序,都有下图所示的三个过程: double/float 类型转变为int 类型 主程序,里面所进行的所有关于定点的计算都通过调用函数来实现 int 类型转变为double/float 定点计算和浮点计算的差别很大,定点数的数值范围与数值精度都有严格的 要求。对于一个I +B +1位的定点系统,它的整数位宽为I ,小数位宽为B ,剩下 的一位为符号位,所表示的定点数范围从max 2I =−2−B 到min −2I 。使用定点 计算的系统中所有的数值都不能超过此范围,超过此范围的数将被限幅。而在此 范围之间的数值,其数值的最小精度也被限定在2−B ,如果小数位大于B 的话, 也要四舍五入为B 位小数,精度控制在2−B 。 2.1.2 基本运算 在C 语言中,当输入一个double/float 变量x 的时候,首先我们把它转为int 变量X : ⎧⎢2B ⋅x +0.5⎥ if x ≥0 ⎪⎣ ⎦ X ⎨ ⎪⎩⎡⎢2B ⋅x −0.5⎤⎥ if x 0 此处采用了四舍五入的取整方法对其化整,化整之后,再对其限幅。此时有: I: 输入的整数二进制位宽 B :输入的小数二进制位宽 max 2I +B =−1 :系统所能表示的最大值; min =−2B +I :系统所能表示的最小值; max 和min 都是int 类型变量。所以限幅过程如下: max if X max ⎧ ⎪ X ⎨min if X =min ⎪ ⎩X if other 此时的X 代表了x 在定点系统中的二进制表示值。 在 C 语言中,必须对所有的运算重新定义才能使用,定义的方法主要通过 调用函数来实现。有两个定点数X 和Y ,它们的和为定点数Z ,那么有 Z=X+Y max if Z max ⎧ ⎪ 且Z ⎨min if Z min ⎪ ⎩ Z if other 我们可以看到,当两个数的和Z 大于最大值max 的时候,它就被限幅到等于max ; 而当它小于最小值min 的时候,它被限幅到min 。X 、Y 本身就是定点数,所以 它们的精度为2−B ,因此其和值z 的精度也就维持在2−B 了。减法有类似的定义。 而乘除法的定义则难度稍微大些。我们仍然设两个定点数 X 和 Y ,它们的 积为定点数Z ,那么有: ⎧ × ⎢X Y ⎥ if X Y

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档