我在一个函数中循环用到以下代码,但是循环一两次,就出现了以下问题:如果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