一个数可以用指数表示,但可以不同小数位多种形式来表示,小数可以浮动。
在 C 语言中,实数是以指数的形式存放在存储单元的。 一个实数表示为指数可以不止一种形式, 如 4.3242 可以表示为 4.3242*10^0,0.43242*10^1,0.043242*10^2, 432.42*10^-2 等, 他们代表同一个值。 可以看到小数点的位置是可以在 43242 几个数字之间浮动的, 只要在小数点位置浮动的同时改变指数的值, 就可以保证它的值不会改变。由于小数点的位置可以浮动, 所以实数的指数形式称为浮点数。
规范化写法:小数点前面为0
规范化的指数形式: 在指数形式的多种表示方式中把小数部分中小数点前的数字为 0, 小数点后第 1 位数字不为 0 的表示形式称为规范化的指数形式, 如 0.43242*10^1 就是 4.3242 的规范化的指数形式。 一个实数只有一个规范化的指数形式。
float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。
如 3.14159 在内存中的存放形式如下:
0.314159 101
算6个有效位
这个决定了精度:
float:有效位6-7位 double:15-16 long double:18-19 当要表示一个精确的数字时候非常重要 否则可能丢失精度。
例子:
float a = 123456789; float b = 1234567890; float c = 12345678900; printf("\n%f\n",a); printf("\n%f\n",b); printf("\n%f\n",c); 输出: 123456792.000000 1234567936.000000 12345678848.000000 只有前面7位是精确的后面的数据就未必了。
C语言浮点类型有效位(float, double,long double)
原文:https://www.cnblogs.com/straybirds/p/14806653.html