【发布时间】:2013-11-09 20:14:58
【问题描述】:
我试图让用户输入一个介于 1.00000 到 0.00001 之间的数字,而边缘不包含在浮点变量中。我可以假设用户在点后输入的数字不超过 5 个。 现在,这是我写的:
printf("Enter required Leibniz gap.(Between 0.00001 to 1.00000)\n");
scanf("%f", &gap);
while ((gap < 0.00002) || (gap > 0.99999))
{
printf("Enter required Leibniz gap.(Between 0.00001 to 1.00000)\n");
scanf("%f", &gap);
}
现在,当我输入可能的最小数字时:0.00002 会卡在 while 循环中。 当我运行调试器时,我看到 0.00002 与这个值一起存储在浮点变量中:1.99999995e-005 任何人都可以为我澄清我做错了什么?为什么 0.00002 不满足条件?这是什么“1.99999995e-005”。
【问题讨论】:
-
gap的类型是什么? -
您的条件与您的用户说明不符! 0.00001
-
提示中的范围与您检查的数字不一致。
0.00002不是0.00001的直接继承者;它们之间有很多值。解决此问题后,您会发现值0.00001无法以二进制浮点数精确表示。 -
为什么不
gap <= 0.00001 || gap >= 1.0? -
1.99999995e-005表示1.99999995 * 10^(-5)。这就是浮点数在计算机中的表示方式:指数(从 1 到 2 的数字)和尾数(10 的幂)。因此,您无法以二进制格式准确表示某些数字,因此您会丢失一些数据,并且在您的情况下,“四舍五入”数字不符合您的条件
标签: c variables floating-point while-loop