首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

精度转换有关问题

2013-02-18 
精度转换问题#include stdio.hint main(){int a,b,cscanf(%d%d%d,&a,&b,&c)printf(%.*lf\n,c,(dou

精度转换问题
#include <stdio.h>  int main()  {      int a,b,c;       scanf("%d%d%d",&a,&b,&c);       printf("%.*lf\n",c,(double)a/b);       return 0;       }
输入1 6 4为什么输出0.1667而不是0.1666
是不是按四舍五入截取数
[解决办法]
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 */
...


[解决办法]
可能是按四舍五入来的,但不确定。
建议LZ不用过于纠结,向前继续。
如果还是很纠结,有两个方向:
1、读懂IEEE 754标准;
2、学习一个高精度计算库(估计还是要了解“精度”原理)。

[解决办法]
引用:
#include <stdio.h>  int main()  {      int a,b,c;       scanf("%d%d%d",&amp;a,&amp;b,&amp;c);       printf("%.*lf\n",c,(double)a/b);       return 0;       }
输入1 6 4为什么输出0.1667而不是0.1666
……

你理解的是对的,当你选择%f的时候他就会自动按照小数点后6位来输出,并且自动四舍五入。

热点排行