首页 理论教育 C语言实数编码实践-C语言程序设计实践教程

C语言实数编码实践-C语言程序设计实践教程

时间:2023-11-01 理论教育 版权反馈
【摘要】:可以用科学计数法来表示小数135600000000000.00实际数字+135600000000000.00科学记数法+1.356×1014只需要记住3个部分:符号、位移量及定点部分。对于二进制表示的实数,-2可以用同样的方法来表示:科学记数法-1.101×2-12可以看出,采用浮点数的方式,可以表示的实数范围大大增加了。其中包括单精度的浮点数和双精度的浮点数。图0-4单精度浮点数的格式以-2为例说明单精度浮点数的存储方式。

C语言实数编码实践-C语言程序设计实践教程

1.定点数浮点

实数是带有小数的,用一定的宽度来表示实数,有两种方法:小数点的位置是固定的,或者小数点的位置是浮动的。例如:

如果规定用8个数码宽度来表示实数,规定小数部分占两个数码,那么1.3415就只能表示成1.34,精度受损。

实数 定点数表示(2位小数,1个符号位)

1.34 +0000134

99999.99 +9999999

很显然,带有很大整数部分或者很小小数部分的实数是不适合用定点数来表示的。

浮点表示法允许小数点的位置浮动:小数点左右可以有不同数量的数码。这样增大了可表示的实数范围。可以用科学计数法来表示小数135600000000000.00

实际数字 +135600000000000.00

科学记数法 +1.356×1014

只需要记住3个部分:符号、位移量(指数部分)及定点部分。这样更节省空间。

对于二进制表示的实数,-(0.000000000001101)2可以用同样的方法来表示:

科学记数法 -1.101×2-12

可以看出,采用浮点数的方式,可以表示的实数范围大大增加了。那实数如何在机器内表示的呢?

2.单精度和双精度浮点数

IEEE(电气电子工程师协会)定义了几种浮点数的标准。其中包括单精度的浮点数和双精度的浮点数。下面以单精度数为例加以说明。(www.xing528.com)

单精度数格式是用32位来存储一个浮点数。符号位占用1位(0为正,1为负),指数占8位,尾数占有23位。

图0-4 单精度浮点数的格式

以-(0.000000000001101)2为例说明单精度浮点数的存储方式。

尾数:底数(1.101)2中小数点前始终为1,故只需要存储小数点右边的位,也被称为尾数。不足23位,在右边补0。

指数:以2为底的指数,指数是有符号的,但并没有使用补码来表示指数,而是采用“余码”的方式来存储。采用这种方式,8位表示的有符号整数的范围为-127~128,在存储时,加上偏移量27-1=127。这样的好处是,余码系统中,所有的整数都是正数。需要注意的是,指数全为0或全为1有特殊的意义。

-12+127=115,转换成二进制:0111 0011。

符号位,负数,该位置1。故单精度数-(0.000000000001101)2在计算机内的存储为:

图0-5 单精度浮点数的存储示例

对单精度浮点数的解析过程,就是以上存储计算过程的逆过程,请自行分析。下面粗略分析一下单精度数的精度和表示范围。

指数部分为8位,单精度数表示的范围约为: -2128~2128。1.17E-38~3.4E+38(科学计数法)。

尾数部分为23位,223= 8388608,即有效数字6-7位,可以保证6位有效数字。

双精度数的表示方法与单精度数的类似,其指数部分占11位、尾数部分占52位,请分析双精度数的表示范围和有效数字位数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈