首页 > 编程知识 正文

C语言中double类型,C语言double用法

时间:2023-05-06 01:27:52 阅读:264011 作者:964

场景:C语言Double类型数据保证精度有关问题

C语言Double类型数据保证精度问题

我用手算算出的数据为-1.35323517,但是在C语言里面为了保证数据精度,VC++运行的结果为-1.35323517024517 ,按说应该在-1.35323517后面补零,但是补的却是024517 ,补上这几位会严重影响我最后的计算结果,怎么样才能让其后面补零而不是024517呢 ,请各位高手指点一下、、

Visual C++

double类型数据精度

------解决方案--------------------

用定点数, 不要用 double.

浮点数对某些十进制数是无法表示的, 只能用一个最接近它的值来表示.

------解决方案--------------------

差这么多?应该中间转过float或者计算次数太多,不然double不会有这么大误差

------解决方案--------------------

是不是用 int 得看你要表示的数的范围.

用 BCD 码是 4 个 bit 表示一个十进制数. 所以, 使用 int, 保留 2 位小数的话, 范围就是 0.00 ~ 999999.99

------解决方案--------------------

引用:计算过程我定义的每个变量都是double类型的,而且是 第一次计算的时候就出现了、、

不应该把,要不就是数据数量级差太多,把代码贴上来看看?

------解决方案--------------------

用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)

同理,用二进制小数也不能精确表示某些10进制小数。

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 */

...

------解决方案--------------------

引用:引用:引用:计算过程我定义的每个变量都是double类型的,而且是 第一次计算的时候就出现了、、

不应该把,要不就是数据数量级差太多,把代码贴上来看看?

我后来运行程序发现时两个浮点数相加减的问题,例如:-9115536.83208176+9115535.47858796,运行这个运算,……

double精度是16位左右,原始数据是10^7,因此小数点后边第8位以后有误差是必然的,没什么好办法,尽量不要做这种结果和源数据数量级差太大的运算,不然保证不了精度

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。