user-0 提问: 自学c语言，求大神解决一个问题。

回复:
user: user-1
content: 楼主学的挺仔细的嘛，。还是去多搜集搜集算法吧

user: user-2
content: include\float.h ... #define DBL_DIG         15                      /* # of decimal digits of precision */ #define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */ #define DBL_MANT_DIG    53                      /* # of bits in mantissa */ #define DBL_MAX         1.7976931348623158e+308 /* max value */ #define DBL_MAX_10_EXP  308                     /* max decimal exponent */ #define DBL_MAX_EXP     1024                    /* max binary exponent */ #define DBL_MIN         2.2250738585072014e-308 /* min positive value */ #define DBL_MIN_10_EXP  (-307)                  /* min decimal exponent */ #define DBL_MIN_EXP     (-1021)                 /* min binary exponent */ #define _DBL_RADIX      2                       /* exponent radix */ #define _DBL_ROUNDS     1                       /* addition rounding: near */  #define FLT_DIG         6                       /* # of decimal digits of precision */ #define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */ #define FLT_GUARD       0 #define FLT_MANT_DIG    24                      /* # of bits in mantissa */ #define FLT_MAX         3.402823466e+38F        /* max value */ #define FLT_MAX_10_EXP  38                      /* max decimal exponent */ #define FLT_MAX_EXP     128                     /* max binary exponent */ #define FLT_MIN         1.175494351e-38F        /* min positive value */ #define FLT_MIN_10_EXP  (-37)                   /* min decimal exponent */ #define FLT_MIN_EXP     (-125)                  /* min binary exponent */ #define FLT_NORMALIZE   0 #define FLT_RADIX       2                       /* exponent radix */ #define FLT_ROUNDS      1                       /* addition rounding: near */ ...

user: user-3
content: 这里  1. 范围   float和double的范围是由指数的位数来决定的。   float的指数位有8位，而double的指数位有11位，分布如下：   float：   1bit（符号位） 8bits（指数位） 23bits（尾数位）   double：   1bit（符号位） 11bits（指数位） 52bits（尾数位）   于是，float的指数范围为-127~+128，而double的指数范围为-1023~+1024，并且指数位是按补码的形式来划分的。   其中负指数决定了浮点数所能表达的绝对值最小的非零数；而正指数决定了浮点数所能表达的绝对值最大的数，也即决定了浮点数的取值范围。   float的范围为-2^128 ~ +2^128，也即-3.40E+38 ~ +3.40E+38；double的范围为-2^1024 ~ +2^1024，也即-1.79E+308 ~ +1.79E+308。  2.  精度   float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的，其整数部分始终是一个隐含着的“1”，由于它是不变的，故不能对精度造成影响。   float：2^23 = 8388608，一共七位，这意味着最多能有7位有效数字，但绝对能保证的为6位，也即float的精度为6~7位有效数字；   double：2^52 = 4503599627370496，一共16位，同理，double的精度为15~16位。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:建议楼主补课高中数学中有关有效数字位数和科学记数法相关知识。 大神，不是数学问题吧~我想问的是为什么是6位，这个6位是怎么来的，float a  =2.35644447;在程序中运算是准确的啊，a+1就是3.35644447，不会变成其他的值的。总觉得这个6不是说a的精度。

user: user-2
content: 建议楼主补课高中数学中有关有效数字位数和科学记数法相关知识。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/390676437 引用 4 楼 shenchenman 的回复:[quote=引用 楼主 swjtueducn2 的回复:] float 内型的数值范围是+3.4E38~-3.4E38(精确到6位小数)。 这个精确到6位小数具体的意思是什么（希望从存储结构上给说明）。 难道float f = 1.326554888;就不精确了吗?  范围和精度2个概念。float精度为6~7位有效数字（2^23 = 8388608），前六位绝对准确。[/quote]  引用 4 楼 shenchenman 的回复:[quote=引用 楼主 swjtueducn2 的回复:] float 内型的数值范围是+3.4E38~-3.4E38(精确到6位小数)。 这个精确到6位小数具体的意思是什么（希望从存储结构上给说明）。 难道float f = 1.326554888;就不精确了吗?  范围和精度2个概念。float精度为6~7位有效数字（2^23 = 8388608），前六位绝对准确。[/quote]  引用 1 楼 user-6 的回复:“这里有7个数字1234567，组合起来代表一个数，前三位123代表这个数的前三个有效数字，后四位4567代表这个数的数量级，这个数的大小是123乘以10的4567次方，精确到前三位” 引用 2 楼 buyong 的回复:[quote=引用 楼主 swjtueducn2 的回复:] float 内型的数值范围是+3.4E38~-3.4E38(精确到6位小数)。 这个精确到6位小数具体的意思是什么（希望从存储结构上给说明）。 难道float f = 1.326554888;就不精确了吗?  不精确了 如果有一个 float f2 = 1.326554222;  你比较f和f2，不同编译器可能给出不同结果。 [/quote]  引用 3 楼 TBWood 的回复:不是精确到6位小数哈，是有效数字是6-7位。  就是说float变量的值最多 7位有效，包含整数部分，如果整数部分3位，那么小数部分就只能精确到4位了。  不懂啊！！！！

user: user-2
content: http://bbs.csdn.net/topics/390676437

user: user-4
content: 引用 楼主 swjtueducn2 的回复:float 内型的数值范围是+3.4E38~-3.4E38(精确到6位小数)。 这个精确到6位小数具体的意思是什么（希望从存储结构上给说明）。 难道float f = 1.326554888;就不精确了吗?  范围和精度2个概念。float精度为6~7位有效数字（2^23 = 8388608），前六位绝对准确。

user: user-3
content: 不是精确到6位小数哈，是有效数字是6-7位。  就是说float变量的值最多 7位有效，包含整数部分，如果整数部分3位，那么小数部分就只能精确到4位了。

user: user-5
content: 引用 楼主 swjtueducn2 的回复:float 内型的数值范围是+3.4E38~-3.4E38(精确到6位小数)。 这个精确到6位小数具体的意思是什么（希望从存储结构上给说明）。 难道float f = 1.326554888;就不精确了吗?  不精确了 如果有一个 float f2 = 1.326554222;  你比较f和f2，不同编译器可能给出不同结果。

user: user-6
content: “这里有7个数字1234567，组合起来代表一个数，前三位123代表这个数的前三个有效数字，后四位4567代表这个数的数量级，这个数的大小是123乘以10的4567次方，精确到前三位”