相关疑难解决方法(0)

浮点运算的准确性

我无法理解这个程序的输出

int main()
{
    double x = 1.8939201459282359e-308;
    double y = 4.9406564584124654e-324;
    printf("%23.16e\n", 1.6*y);
    printf("%23.16e\n", 1.7*y);
    printf("%23.16e\n", 1.8*y);
    printf("%23.16e\n", 1.9*y);
    printf("%23.16e\n", 2.0*y);
    printf("%23.16e\n", x + 1.6*y);
    printf("%23.16e\n", x + 1.7*y);
    printf("%23.16e\n", x + 1.8*y);
    printf("%23.16e\n", x + 1.9*y);
    printf("%23.16e\n", x + 2.0*y);
}
Run Code Online (Sandbox Code Playgroud)

输出是

9.8813129168249309e-324
9.8813129168249309e-324
9.8813129168249309e-324
9.8813129168249309e-324
9.8813129168249309e-324
1.8939201459282364e-308
1.8939201459282364e-308
1.8939201459282369e-308
1.8939201459282369e-308
1.8939201459282369e-308
Run Code Online (Sandbox Code Playgroud)

我正在使用IEEE算法.该变量y保持最小的IEEE编号.前五张照片显示的数字是我预期的两倍.令我困惑的是,接下来的五个版画显示不同的数字.如果1.6*y是相同的2.0*y话怎么会x + 1.6*y有所不同x + 2.0*y

c floating-point floating-accuracy ieee-754

8
推荐指数
1
解决办法
552
查看次数

标签 统计

c ×1

floating-accuracy ×1

floating-point ×1

ieee-754 ×1