C语言数据类型--浮点型

知识点一:浮点数据类型

          1)浮点数据类型包括float(单精度浮点型),double(双精度浮点型),long double(长精度浮点型)。

          2)由于小数位置可以浮动,所以实数的指数形式称为浮点数。

          3)由于用二进制形式表示一个实数以及存储单元的长度是有限的,因此不可能得到完全精确的值,只能存储成有限的精确度。小数部分占的为(bit)数愈多,数的有效数字愈多,精确度也就愈高。指数部分占位数愈多,则能表示的数值范围愈大。

知识点二:浮点数取值范围

 知识点三:浮点数表示形式

           1)十进制小数形式:由数字和小数点组成;

                 例:3.14,4.,.4,.0,0.

           2)指数形式:“十进制小数或整数”+“e(或E)"+"十进制整数”,e(或E)的两边必须有数,不能省略。

                 例:3.5-4表示3.5*10*(-4),5.4E+8

           3)单精度浮点数类型小数点后有效的位数只有6位;

           4)双精度浮点数类型的有效位数可以达到16位;

           5)绝大多数C编译器都规定小数点后最多保留6位,其余部分四舍五入;

知识点四:浮点数定义

          通过类型定义符,可以定义一个浮点数类型的变量,与定义整数变量的方法相同;

         【类型定义符】标识符;

           float fnum;  double fnum;

            浮点类型变量也可以使用printf()函数输出,与整型变量不同的是:float的格式说明项为“%f”;double的格式说明项为“%f"。

知识点五:处理带小数的数值

#include <stdio.h>
int main()
{
int a = 1.234567;
int b = 0.00001;
int c = 365.12345;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
return 0;
}

             其结果为1  0   365.即小数部分丢失;

          1)我们把上面代码中的整型 int ,用单精度浮点型 float 替代。 之后,再将 printf("%d\n",a); 中的占位符是 %d ,所以我们用 %f 替换。( %d 占位符用于整型, %f 占 位符用于浮点型);

#include <stdio.h>
int main()
{
float a = 1.234567;
float b = 0.00001;
float c = 365.12345;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
结果:1.2345567
      0.000010
      365.123444

          2) 将 int 替换成 float 之后,大部分的数据都是正确的。但是 365.12345 变成了 365.123444 ,很明显精度出 现了误差。 这是因为,浮点数并不能表示无限的精确,它会存在着一定的误差;

         3)C标准规定,float类型必须至少能表示6位有效数字,并且取值范围至少是10^-37~10+37。所以,使用float来装365.12345时,前面六位数值是准确的,但是后面的数值略有误差;

         4)我们把上面代码中的 float 换 成 double;

#include <stdio.h>
int main()
{
double a = 1.234567;
double b = 0.00001;
double c = 365.12345;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
结果:1.234567
     0.000010
     365.123450

            此次365.12345 也是正确的了;

           *double 类型也是有精度范围的。如果是更高精度的数据, double 也会出现误差;

知识点六:浮点类型所占字节大小

           #按照我们之前对整型的经验,越大范围的整型类型所占的空间越大。 那么对于浮点类型来说,越高精度、越大范围的浮点类型,应该也会占用越大的空间。 我们用sizeof来测量一下float和double分别占用多大的空间。

#include <stdio.h>
int main()
{
printf("sizeof float = %d\n", sizeof(float));
printf("sizeof double = %d\n", sizeof(double));
return 0;
}
结果;sizeof float=4
      sizeof double=8

          #float , double 分别为4,8个字节。验证了我们之前对于越大范围,越高精度的类型所占空间越大的设想.

猜你喜欢

转载自blog.csdn.net/m0_73463638/article/details/126728256
今日推荐