【发布时间】:2012-11-23 12:49:02
【问题描述】:
我正在尝试将双精度值转换为指数,但出现舍入错误。
int main (unsigned int argc, char **argv)
{
float a=293.17;
float b=293.10;
double ULfreq = 2089.555000;
double upfreq = 0.0;
long int t = 0;
long int u = 0;
upfreq = ULfreq * 1000000.0;
printf(" %f, upfreq:%22.16E\n", upfreq, upfreq);
return 0;
}
当我在 32 位计算机上运行此代码时,我得到以下结果:
2089555000.000000, upfreq:2.0895549999999998E+09
在 64 位上运行它会给出正确的答案。
是否可以在 32 位服务器上进行此转换以及如何进行?
【问题讨论】:
-
感谢您不要复制和粘贴代码...
-
@glglgl 我对他的帖子进行了编辑,现在或很快你应该可以看到它。
-
其实
2.0895549999999998E+09(更准确地说是十六进制0x1.f23050dffffffp30)是(double)2089.555乘以1000000的双精度乘法的正确结果。32位计算机是正确的, 64 位计算机在计算过程中或在转换为字符串的过程中做了一些奇怪的事情 -
要求打印更精确,
%.7f应该会告诉您不同之处。
标签: c decimal exponential