C 知识量:16 - 74 - 317
面向金融和数学的程序经常会用到浮点数,在C语言中,用于表示浮点数的类型有float、double和long double类型。
浮点数的表示类似于科学计数法,例如:1.14×103。而在计算机中使用指数记数法(即e记数法)来表示,例如:1.14e3。
float类型必须至少能表示6位有效数字,取值范围至少是10-37~1037。通常,系统储存一个float浮点数要占用32位,其中8位用于表示指数的值和符号,其余24位用于表示非指数部分及其符号。
double类型和float类型的最小取值范围相同,但是,至少必须能表示10位有效数字。通常,double类型占用64位。
long double类型至少与double类型有相同的精度,但通常可以满足比double类型更高的精度要求。
浮点型变量的声明和初始化方式与整型变量相同。
float a,b; double c = 1.324e-5; long double d = 3.46e32;
浮点型常量的基本形式是:有符号的数字(包括小数点),后面紧跟e或E,最后是一个有符号数表示10的指数。例如:
6.76E+15 -3.4e-6
其中,6.76E+15中的“+”可以省略,即写作6.76E15。
需要注意的是:
可以没有小数点或指数部分,但是不能同时省略两者。
可以省略小数部门或整数部门,但是不能同时省略两者。
默认情况下,编译器假定浮点型常量是double类型。在浮点数后面加上f或F后缀可以覆盖默认设置,编译器将按照float类型处理。使用l或L后缀可以将常量设置为long double类型。
printf()函数使用%f转换说明来打印十进制记数法的float和double类型浮点数,用%e打印指数记数法的浮点数,用%Lf和%Le打印long double类型的浮点数。
#include <stdio.h> int main(void) { float a = 1.4; double b = 3.14e9; long double c = 9.32e-4; printf("a is:%f\n", a); printf("b is:%e\n", b); printf("c is:%Lf\n", c); return 0; }
运行的结果为:
a is:1.400000 b is:3.140000e+009 c is:0.000932
浮点值的溢出分为:上溢和下溢。
上溢:当计算导致数字过大,超出当前类型能表达的范围时,就会发生上溢。这时会给变量赋一个表示无穷大的特定值,使用printf()函数打印时会显示inf。
下溢:当一个值过小,超出当前类型能表达的范围时,就会发生下溢。这时会损失原末尾有效位上的数字,甚至会导致所有位全部为0。
#include <stdio.h> int main(void) { float a = 1.4e40 * 100.0f; double b = 3.14e-6; double c = 3.14e-9; printf("a is:%f\n", a); printf("b is:%f\n", b); printf("c is:%f\n", c); return 0; }
运行的结果为:
a is:inf b is:0.000003 c is:0.000000
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6