定点数与浮点数区别.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:8 大小:35KB 金币:18 举报 版权申诉
预览加载中,请您耐心等待几秒...

定点数与浮点数区别.doc

定点数与浮点数区别.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

18 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

定点数与浮点数区别最近做HDR时,经常要用NV提供的16位纹理,它的说明书16位能达到24位的精度,就很奇怪?一直搞不懂浮点数的精度怎么算的?今天认真看了一下IEEEfloatpoint的标准,终于明白是什么了1.什么是浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数(FixedPointNumber)。在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式,比如99.00或者00.99可以用于表达具有四位精度(Precision),小数点后有两位的货币值。由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。SQL中的NUMBER数据类型就是利用定点数来定义的。还有一种提议的表达方式为有理数表达方式,即用两个整数的比值来表达实数。定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如123.45用十进制科学计数法可以表达为1.2345×102,其中1.2345为尾数,10为基数,2为指数。浮点数利用指数达到了浮动小数点的效果,从而可以灵活乇泶锔?范围的实数。提示:尾数有时也称为有效数字(Significand)。尾数实际上是有效数字的非正式说法。同样的数值可以有多种浮点数表达方式,比如上面例子中的123.45可以表达为12.345×101,0.12345×103或者1.2345×102。因为这种多样性,有必要对其加以规范化以达到统一表达的目标。规范的(Normalized)浮点数表达方式具有如下形式:±d.dd...d×βe,(0≤di和>=在任一操作数为NaN时均返回false。等于操作符==在任一操作数为NaN时均返回false,即使是两个具有相同位模式的NaN也一样。而操作符!=则当任一操作数为NaN时返回true。这个规则的一个有趣的结果是x!=x当x为NaN时竟然为真。可以产生NaN的操作如下所示:此外,任何有NaN作为操作数的操作也将产生NaN。用特殊的NaN来表达上述运算错误的意义在于避免了因这些错误而导致运算的不必要的终止。比如,如果一个被循环调用的浮点运算方法,可能由于输入的参数问题而导致发生这些错螅琋aN使得即使某次循环发生了这样的错误,也可以简单地继续执行循环以进行那些没有错误的运算。你可能想到,既然Java有异常处理机制,也许可以通过捕获并忽略异常达到相同的效果。但是,要知道,IEEE标准不是仅仅为Java而制定的,各种语言处理异常的机制不尽相同,这将使得代码的迁移变得更加困难。何况,不是所有语言都有类似的异常或者信号(Signal)处理机制。注意:Java中,不同于浮点数的处理,整数的0除以0将抛出java.lang.ArithmeticException异常。4.2.无穷和NaN一样,特殊值无穷(Infinity)的指数部分同样为emax+1=128,不过无穷的尾数域必须为零。无穷用于表达计算中产生的上溢(Overflow)问题。比如两个极大的数相乘时,尽管两个操作数本身可以用保存为浮点数,但其结果可能大到无法保存为浮点数,而必须进行舍入。根据IEEE标准,此时不是将结果舍入为可以保存的最大的浮点数(因为这个数可能离实际的结果相差太远而毫无意义),而是将其舍入为无穷。对于负数结果也是如此,只不过此时舍入为负无穷,也就是说符号域为1的无穷。有了NaN的经验我们不难理解,特殊值无穷使得计算中发生的上溢错误不必以终止运算为结果。无穷和除NaN以外的其它浮点数一样是有序的,从小到大依次为负无穷,负的有穷非零值,正负零(随后介绍),正的有穷非零值以及正无穷。除NaN以外的任何非零值除以零,结果都将是无穷,而符号则由作为除数的零的符号决定。回顾我们对NaN的介绍,当零除以零时得到的结果不是无穷而是NaN。原因不难理解,当除数和被除数都逼近于零时,其商可能为任何值,所以IEEE标准决定此时用NaN作为商比较合适。4.3.有符号的零因为IEEE标准的浮点数格式中,小数点左侧的1是隐藏的,而零显然需要尾数必须是零。所以,零也就无法直接用这种格式表达而只能特殊处理。实际上,零