比较 C 中的 float

标签 c floating-point precision floating-accuracy

假设您获得了以下代码摘录:

示例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/

相关文章:

Java - 正负零的比较

java - 为什么在使用 String.valueOf 或 Float.toString 时此循环会变成无限循环?

delphi - 如何避免 ftFmtBcd 失去精度?

c++ - C++中双变量/计算的小数点后的数字

c++ - AVX中的6元素 double vector 矩阵 vector 相乘

python - Numpy/Scipy 如何将 C 函数转换为向量化的 Python 函数?

C 程序 : how to parse csv string using a loop?

c - 使用字符数组进行动态分配

python - 与变量一起使用的 10e 符号?

floating-point - pytorch 的机器精度是多少,什么时候应该使用 double ?