0

我正在尝试将双精度值转换为指数,但出现舍入错误。

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 位服务器上进行此转换以及如何进行?

4

1 回答 1

4

这不是舍入误差,而是浮点的表示特征。大多数短分数,例如 1.1,都是以 2 为底的无限级数(如 1/3 = 0.3333...,以 10 为底)。因此,必须将其夹在某个地方。当转换回十进制时,你得到的就是 2.08955499999。

在第一种情况下,您要求 printf 函数将其四舍五入到默认精度 %f,即小数分隔符后的 6 位小数。在第二种情况下,您要求 22 位精度并得到...

于 2012-11-23T12:57:16.927 回答