正在加载图片...
第3章定点数和浮点数249 下载 有这3个十进制数都按32位单精度浮点数 4B800000h 来存放。当把此数分成符号位,指数和有效数位时,如下所示: 01001011100000000000000000000000 也即为 1.000000000000×22 下一个表示的最大有效数是16777218,它的二进制浮点表示为: 1.000000010×2 两个不同的十进制数却以相同的浮点数存放可能是也可能不是一个问题 如果是为银行编写程序且用单精度浮点数来存储元、分等,则你可能会很苦恼地发现 $26214400与$2621401是一样的。两个数字都是 1.00000000000000000000000×218 这就是当处理元、分的时候,为什么要用定点数的原因。在处理浮点数的时候,可能还会发 现其他足以使人发疯的小毛病。程序原本计算的结果是3.50却成了3499999999浮点计算 中这种事情经常发生,但也没有别的更好的处理方法。 如果想用浮点表示法,又不想出现单精度那样的问题,可以用双精度浮点格式。这样的 数需要8个字节来存放,格式如下: s=1位符号 e=11位指数 f=52位有效数 指数偏移量为1023,即3FFh,所以,以这种格式存放的数为 (-1)×1.f×2-1023 它具有与单精度格式中所提到适用于0、无穷大和NaN等情形相同的规则。 最小的双精度浮点格式的正数或负数为 (1.0.0)×2-1022 最大的数为 (1.1.1)×21023 52个1 用十进制表示,它的范围近似为2.2250738585072014×10-08~1.7976931348623158 103。10的308次幂是一个非常大的数,在1后面有308个十进制零 53位有效数(包括没有包含在内的那1位)的精度与16个十进制位表示的精度十分接近 相对于单精度浮点数来说这种表示要好多了,但它仍然意味着最终还是有一些数与另一些数 是相等的。例如,140737488355328.00与14073748835532801是相同的,这两个数按照 64位双精度浮点格式存储,结果都是: 42E0000000000000h 可把它转换为第23章 定点数和浮点数 249 下载 有这3个十进制数都按3 2位单精度浮点数 4 B 8 0 0 0 0 0 h 来存放。当把此数分成符号位,指数和有效数位时,如下所示: 0 10010111 00000000000000000000000 也即为 1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0T W O×2 2 4 下一个表示的最大有效数是 16 777 218,它的二进制浮点表示为: 1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1T W O×2 2 4 两个不同的十进制数却以相同的浮点数存放可能是也可能不是一个问题。 如果是为银行编写程序且用单精度浮点数来存储元、分等,则你可能会很苦恼地发现 $262 144.00与$262 144.01是一样的。两个数字都是: 1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0T W O×2 1 8 这就是当处理元、分的时候,为什么要用定点数的原因。在处理浮点数的时候,可能还会发 现其他足以使人发疯的小毛病。程序原本计算的结果是 3 . 5 0却成了3 . 4 9 9 9 9 9 9 9 9 9 9 9。浮点计算 中这种事情经常发生,但也没有别的更好的处理方法。 如果想用浮点表示法,又不想出现单精度那样的问题,可以用双精度浮点格式。这样的 数需要8个字节来存放,格式如下: 指数偏移量为1 0 2 3,即3 F F h,所以,以这种格式存放的数为 (-1)s×1 . f×2 e-1 0 2 3 它具有与单精度格式中所提到适用于 0、无穷大和N a N等情形相同的规则。 最小的双精度浮点格式的正数或负数为 (1 . 0 . . . . . . 0)T W O×2 -1 0 2 2 5 2个0 最大的数为 (1 . 1 . . . . . . 1)T W O×2 1 0 2 3 5 2个1 用十进制表示,它的范围近似为 2 . 2 2 5 0 7 3 8 5 8 5 0 7 2 0 1 4×1 0-3 0 8~1 . 7 9 7 6 9 3 1 3 4 8 6 2 3 1 5 8× 1 03 0 8。1 0的3 0 8次幂是一个非常大的数,在 1 后面有3 0 8个十进制零。 5 3位有效数(包括没有包含在内的那 1位)的精度与 1 6个十进制位表示的精度十分接近。 相对于单精度浮点数来说这种表示要好多了,但它仍然意味着最终还是有一些数与另一些数 是相等的。例如,140 737 488 355 328.00与140 737 488 355 328.01是相同的,这两个数按照 6 4位双精度浮点格式存储,结果都是: 4 2 E 0 0 0 0 0 0 0 0 0 0 0 0 0 h 可把它转换为: s=1位符号 e=11位指数 f=52位有效数
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有