通常,在C语言中,用浮点数表示实数,可分为单精度(float)浮点数和双精度浮点数(double),在C99以后的标准中又增加了长双精度浮点型(longdouble)。它们被称为实浮点数,在C99以后的标准中还有复数类型的浮点数,对应3种实浮点数,复数类型的浮点数也有3种,分别是float_Complex、doubel_Complex和longdouble_Complex。
对于复数类型的浮点数可以表示为x+yi形式,例如下面声明了复数变量z,并对其进行了初始化,其中2.0为z的实部,5.0为z的虚部。
double_Complexz=2.0+5.0i;
复数的实部和虚部分别是两个实浮点数。在C的实现中是否支持复数类型,由实现决定。DevC++5.11支持复数类型。
1.实浮点数取值范围与精度float、double、longdouble取值范围:10-37~
相邻值最小差:float:10-5,double:10-9,longdouble:10-9。最小十进制位数:float:≥6,double:≥10,longdouble:≥10。C语言标准允许在上述最低要求的前提下让编译器自行决定取值范围与精度,用户可以查看float.h获得相应编译器的取值范围与精度。
C标准仅对浮点类型提出了一些基本要求,没有对如何实现进行规定。目前,大多数C编译器采用IEEE标准(即IEC)实现。IEEE采用科学记数法表示浮点数值,它规定了四种浮点数值的表示方式:
●单精度(32位)
●双精度(64位)
●延伸单精度(≥43位,不常用)
●延伸双精度(≥79位,一般情况下,Intelx86结构的计算机采用的是80位,而SPARC结构的计算机采用的是位)
其中,只有32位单精度浮点数是本标准强烈要求支持的,其他都是可选部分。
二进制浮点数由三部分组成:
●符号位,0表示正数,1表示负数。
●阶码,规定为实际指数值加上一个偏移值。偏移值为2n-1-1,其中的n为存储指数的比特位长度。
●尾数,用于存储“有效数字”的小数部分,使用原码表示。
位数
位数:
(阶码,尾数,符号)
取值范围(绝对值)
十进制精度
32
(8,23,1)
0.0以及1.19×10-38~
3.×
6
64
(11,52,1)
0.0以及2.×10-~
1.×10
15
79
(15,63,1)
0.0以及1.2×10-~
1.2×10
19
2.浮点数的舍入模式
舍入模式是指一个浮点数向整数转换时靠向哪个方向,这也是浮点类型的一个重要特性。IEEE规定了4种舍入方法。
●就近舍入,即四舍五入。C99用round()函数实现这种转换。
●向0(截断舍入。C语言的类型转换就是这样,例如(int)1.65为1,(int)-1.65为-1。
●向负无穷大(向下)舍入。C语言的floor()函数实现这种转换。例如:floor(2.3)为2,floor(-2.3)为-3。
●向正无穷大(向上)舍入。C语言的ceil()函数实现这种转换。例如:ceil(2.3)为3,ceil(-2.3)为-2。
预览时标签不可点收录于合集#个上一篇下一篇