<分区>
Possible Duplicate:
Floating point inaccuracy examples
我正在尝试将 char 数组转换为 double 组,但我在小数点的最后一个精度处进行了某种舍入。请看下面的代码。
#include <stdio.h>
#define INT32MAX 017777777777
#define LIND 0
#define MIND 1
typedef int Int32;
typedef unsigned int UInt32;
typedef short int Int16;
union _talign
{
double _doubles[2];
double _double;
Int32 _long[4];
UInt32 _unsign[4];
Int16 _short[8];
float _float[4];
char _char[16];
long long _BIGINT;
};
int main()
{
union _talign value;
double dval = 0.0;
double dmag = 1000000.0000000000;
int i=0;
char cp[8] = { 135,55,83,03,178,67,55,0};
for(i=0;i<8;i++)
value._char[i] = cp[i];
dval = (double)value._long[MIND];
dval = ((double)INT32MAX + 1.0) * dval * 2.0;
dval = (dval + value._long[LIND]) / dmag ;
printf("Expecting dval = 15555555558.111111\n");
printf("Got dval = %lf\n",dval);
return 0;
}
我期望 dval 为 15555555558.111111,但程序返回 15555555558.111113。 因此,任何人都可以想出正确的最后一个精度或任何其他方法来进行这种转换。您的建议将不胜感激。谢谢