假设您获得了以下代码摘录:
示例1:
printf("Enter two real numbers: ");
scanf("%f %f", &a, &b);
if (a == b) //do something
我的问题是:比较直接从键盘获取的 float 时是否需要使用一些“安全措施”?
例如,如果我得到类似的代码:
示例2:
printf("Enter two real numbers: ");
scanf("%f %f", &a, &b);
float x = a / b + 2 * a / 3;
float y = b / a + 3 * a / 2;
if (x == y) //do something
我知道我应该使用:
fabs(x - y) < RefValue
for if 的条件只是为了避免潜在发生false,即使结果应该是true。 但是我也必须在示例 1 中这样做吗?
最佳答案
可以很安全地假设,使用相同的输入法从键盘输入的两个数字在完全相同的字符表示中最终会得到相同的二进制数。这与精度完全无关 - 毕竟,这是可重复性,我们所依赖的计算机程序最固有的特征之一。这两个数字可能不精确并且不完全代表输入,但它们必须相同。简而言之,您的示例 1 是有效的。
甚至有可能(但不能保证)不同的字符表示形式最终会出现相同的二进制数,这是因为并非所有十进制数在内部 FP 中都有精确的表示形式格式。不过,这不会影响您的比较,因为除了使用不同的内部表示之外,您对此无能为力。
关于比较 C 中的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320076/