自学c语言,求大神解决一个问题。

swjtueducn2 2014-05-04 04:09:39
float 内型的数值范围是+3.4E38~-3.4E38(精确到6位小数)。
这个精确到6位小数具体的意思是什么(希望从存储结构上给说明)。
难道float f = 1.326554888;就不精确了吗?
...全文
355 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
搬砖男子汉 2014-05-05
  • 打赏
  • 举报
回复
楼主学的挺仔细的嘛,。还是去多搜集搜集算法吧
赵4老师 2014-05-05
  • 打赏
  • 举报
回复
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 */
...
tbwork 2014-05-05
  • 打赏
  • 举报
回复
这里 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位。
swjtueducn2 2014-05-05
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
建议楼主补课高中数学中有关有效数字位数和科学记数法相关知识。
大神,不是数学问题吧~我想问的是为什么是6位,这个6位是怎么来的,float a =2.35644447;在程序中运算是准确的啊,a+1就是3.35644447,不会变成其他的值的。总觉得这个6不是说a的精度。
赵4老师 2014-05-05
  • 打赏
  • 举报
回复
建议楼主补课高中数学中有关有效数字位数和科学记数法相关知识。
swjtueducn2 2014-05-05
  • 打赏
  • 举报
回复
引用 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 楼 baichi4141 的回复:
“这里有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位了。
不懂啊!!!!
赵4老师 2014-05-04
  • 打赏
  • 举报
回复
shenchenman 2014-05-04
  • 打赏
  • 举报
回复
引用 楼主 swjtueducn2 的回复:
float 内型的数值范围是+3.4E38~-3.4E38(精确到6位小数)。 这个精确到6位小数具体的意思是什么(希望从存储结构上给说明)。 难道float f = 1.326554888;就不精确了吗?
范围和精度2个概念。float精度为6~7位有效数字(2^23 = 8388608),前六位绝对准确。
tbwork 2014-05-04
  • 打赏
  • 举报
回复
不是精确到6位小数哈,是有效数字是6-7位。 就是说float变量的值最多 7位有效,包含整数部分,如果整数部分3位,那么小数部分就只能精确到4位了。
buyong 2014-05-04
  • 打赏
  • 举报
回复
引用 楼主 swjtueducn2 的回复:
float 内型的数值范围是+3.4E38~-3.4E38(精确到6位小数)。 这个精确到6位小数具体的意思是什么(希望从存储结构上给说明)。 难道float f = 1.326554888;就不精确了吗?
不精确了 如果有一个 float f2 = 1.326554222; 你比较f和f2,不同编译器可能给出不同结果。
baichi4141 2014-05-04
  • 打赏
  • 举报
回复
“这里有7个数字1234567,组合起来代表一个数,前三位123代表这个数的前三个有效数字,后四位4567代表这个数的数量级,这个数的大小是123乘以10的4567次方,精确到前三位”

70,016

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧