打印
[其他]

实型数据(浮点数)

[复制链接]
455|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duo点|  楼主 | 2023-3-15 09:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

实型数据也称为浮点数或实数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。


  实数的表示


  1) 十进制数形式


  由数码0~ 9和小数点组成。 例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230 等均为合法的实数。

  注意,必须有小数点。


  2) 指数形式


  由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为:

  a E n(a为十进制数,n为十进制整数)

  其值为 a*10n。如:

  2.1E5 (等于2.1*105)

  3.7E-2 (等于3.7*10-2)

  0.5E7 (等于0.5*107)

  -2.8E-2 (等于-2.8*10-2)

  以下不是合法的实数:

  345 (无小数点)

  E7 (阶码标志E之前无数字)

  -5 (无阶码标志)

  53.-E3 (负号位置不对)

  2.7E (无阶码)


  【例3-5】输出实数。



view plaincopy to clipboardprint?

  • #include <stdio.h>
  • int main(void){
  •     printf("%f\n ",356.);
  •     printf("%f\n ",356);
  •     printf("%f\n ",356.0);
  •     return 0;
  • }


  3) 实数在内存中的存放形式


  实数一般占4个字节(32位)内存空间。按指数形式存储。实数3.14159在内存中的存放形式如下:

           说明:

  小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。


  指数部分占的位数愈多,则能表示的数值范围愈大。


  实型变量


  实型变量分为:单精度(float型)、双精度(double型)和长双精度(long double型)三类。


  在VC6.0中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。

                  

实型变量定义的格式和书写规则与整型相同。例如:

view plaincopy to clipboardprint?

  • float x,y;  // x,y为单精度实型量
  • double a,b,c;  // a,b,c为双精度实型量


  实数的舍入误差

  由于实数是由有限的存储单元组成的,因此能提供的有效数字总是有限的。如下例。


  【例3-6】实数的舍入误差。


view plaincopy to clipboardprint?

  • #include <stdio.h>
  • int main(void){
  •     float a,b;
  •     a=123456.789e5;
  •     b=a+20;
  •     printf("a=%f\n",a);
  •     printf("b=%f\n",b);
  •     return 0;
  • }


  注意:1.0/3*3的结果并不等于1。


  【例3-7】



view plaincopy to clipboardprint?

  • #include <stdio.h>
  • int main(void){
  •     float a;
  •     double b;
  •     a=33333.33333;
  •     b=33333.33333333333333;
  •     printf("a=%f\nb=%f\n",a,b);
  •     return 0;
  • }


  从本例可以看出:


  由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。


  b 是双精度型,有效位为十六位。但VC6.0规定小数后最多保留六位,其余部分四舍五入。


  注意:实型常数不分单、双精度,都按双精度double型处理。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

376

主题

1418

帖子

1

粉丝