Presentation is loading. Please wait.

Presentation is loading. Please wait.

第四节 浮点数类型.

Similar presentations


Presentation on theme: "第四节 浮点数类型."— Presentation transcript:

1 第四节 浮点数类型

2 浮点数类型 浮点型常数的表示方法 有两种表示形式: (1)十进制小数表示法: 与数学中实数写法相同。 如0.1、123.456等
(2)指数表示法(科学表示法): 如0.5E4、0.1234E-6、0.789e2等都是合法的。它们的含义分别是: 0.5×104 0.1234×10-6 0.789×102

3 浮点数类型 浮点型数据的存放方式 一个浮点float型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。分成尾数和指数两部分。 x 127+y 符号 0/1 尾数部分 1.x 指数 2y

4 浮点数类型 浮点型变量的分类 分为三类: 单精度( float型 ) 双精度( double型 ) 长双精度( long double型 )

5 浮点数类型 仅以某种机器为例! float double long double long double一般不支持! 类 型 占存储空间
类 型 占存储空间 有效数位数 数 值 范 围 float 4个字节 6 ∽ 7 -3.4×10-38 ∽ 3.4×1038 double 8个字节 15 ∽ 16 -1.7× ∽ 1.7×10308 long double 16个字节 18 ∽ 19 -1.2× ∽ 1.2×104932 仅以某种机器为例! long double一般不支持!

6 浮点数类型 浮点型数据表示误差 由于浮点型变量存放在有限的几个字节的存储单元中,所以能提供的有效数字总是有限的,因此有效位以外的数字将被舍去,由此会产生误差。 即:浮点数的表示是不精确的!

7 浮点数类型 浮点型数据表示误差 例: int main() { double a; a=0.1;
printf("a=%.17f\n",a); } 运行结果为: a= 由于一个double变量只能保证16位有效 数字,所以后面的数字是无意义的。 类似的还有1.0/3*3 结果并不一定等于1。

8 浮点数类型 例: int main() 浮点型数据表示误差 { double a,b; b = 2.0e20 + 1.0;
a = b - 2.0e20; printf("%f \n", a); } VC运行结果为:

9 浮点数类型 浮点型常量的类型 浮点型常量的类型为double,而不是float。 例如: float f;
系统将 和 按double数据存储和运算,得到一个double的乘积,然后取前7位赋值给float变量f,这样做的目的是为了保证计算结果更精确。但是运算速度降低了。可以在浮点型常量的后面加上字符f或F(如 f、 F),此时编译系统会按float处理它们

10 浮点数类型 浮点型变量的溢出 浮点型变量的溢出(overflow)和下溢 (underflow)
一个double型的变量最大允许值为DBL_MAX(定义在float.h中)(如: e+308),最小正值为DBL_MIN(如: e-308),如果超出范围就会出现上溢或下溢的错误情况

11 浮点数类型 浮点型变量的上溢 double toobig = DBL_MAX * 100.0;
printf("%e\n", toobig); 32位系统中的运行结果为: 1.#INF00e+000

12 浮点数类型 浮点型变量的上溢 double toosmall = DBL_MIN / 1E30;
printf("%e\n", toosmall); 32位系统中的运行结果为: e+000


Download ppt "第四节 浮点数类型."

Similar presentations


Ads by Google