宽带自助服务网:我的MFC程序中有这样一个问题。。。。。。。。。。。。。

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/09 10:52:30
我在一个函数中循环用到以下代码,但是循环一两次,就出现了以下问题:
如果real=2.45,当执行了real=real-y,后得到real=0.44999999999998;
我实在不知该如何解决这个问题,还请各位高手帮忙!
real=(real) *(m_calcu.m_number_system);
//m_calcu.m_number_system是一个常量,int类型;
y=(int)real;
real=real-y;
其中变量定义为:int y; double real;

顺便问一下,有没有比double型数精度更高的数据类型,我的程序中将64位最大的二进制数转换为10进制数的时候出现了错误的结果,但是如果二进制数的位数低的话,就转换正确了。像这样受到精度限制的问题该怎么解决呢?

是计算累积误差。

如果单单real=2.45L, real = real - (int) real
打印结果应没问题。

用MS VC++ 编译器算:
#include <stdio.h>
#include <stdlib.h>
main()
{
double a=2.45l; // 长字带L
printf("%30.15lf %30.15lf",a, a - (int) a);
exit(0);
}

2.450000000000000 0.450000000000000

比double更高得就是double double类型,VS2003以上版本支持
有时候如果你确性你得数据是有理数,你可以用p/q表示,p,q都是整数。