float最大能保存多少的数值?(必须是精确的数值)

C++语言 码拜 10年前 (2015-05-11) 2843次浏览 0个评论
 

我随便测了一下,float最大只能保存3000万的数值,再高,就不准确了,

比如:
float a = 32341234; // 在内存中,数值与此相等
但是如果是这样:
float a = 42341234; // 在内存中却是42341232

看来,要想保存准确的带小数的数值还是要用double

各位怎么看

从编码形式角度,2的N次方(N不大于128)应该是准确的
引用 1 楼 cao_julians 的回复:

从编码形式角度,2的N次方(N不大于128)应该是准确的

别人说的是浮点数

float.h

#define DBL_DECIMAL_DIG  17                      // # of decimal digits of rounding precision
#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_HAS_SUBNORM  1                       // type does support subnormal numbers
#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_TRUE_MIN     4.9406564584124654e-324 // min positive value

#define FLT_DECIMAL_DIG  9                       // # of decimal digits of rounding precision
#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_HAS_SUBNORM  1                       // type does support subnormal numbers
#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 normalized 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_TRUE_MIN     1.401298464e-45F        // min positive value
25分
引用 1 楼 cao_julians 的回复:

从编码形式角度,2的N次方(N不大于128)应该是准确的

4byte的int类型能表示2的100次方?
8byte 的整类型能表示都大?

5分
理解讨论之前请先学会如何观察

http://bbs.csdn.net/topics/390676437

10分
一个数转为二进制数,其位数不超过24位,那么用float将会是准确值,如果不超过53位,double将是准确值,再大就要等科技进步了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明float最大能保存多少的数值?(必须是精确的数值)
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!