我无法理解这个程序的输出
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?