我正在寻找一个diff工具,它还可以比较文本文件中的浮点值(在一定的容差范围内)。这是典型的文本比较 diff 功能的补充,可以选择忽略空格、忽略大小写等。GUI(或全屏控制台 UI)还可以,但我真的更喜欢面向流的(stdin/stdout) )工具。
这是一个非常简单的示例,它描述了理想工具的特征。 foo.c 有 2 个版本:
foo_v1.c:
#include <stdio.h>
#define PI 3.14159265359
#define E_CUBED 20.0855
#define HALF_PHI 0.809f
#define C_SQUARED 89875517873681764.0L
const double AVO = 6.022e23; /* Avocado number */
int main()
{
printf("%g %g %g %Lg %g\n", PI, E_CUBED, HALF_PHI, C_SQUARED, AVO);
return 0;
}
foo_v2.c:
#include <stdio.h>
#define PI 3.14159265358979
#define E_CUBED 2.00855e+1
#define HALF_PHI 8.09e-1f
#define C_SQUARED 8.9875517873681764e18L
const double AVO = 6.022e23; /* Avogadro number */
int main()
{
printf("%g %g %g %Lg %g\n", PI, E_CUBED, HALF_PHI, C_SQUARED, AVO);
return 0;
}
这是我期望的差异输出:
$ diff --floats=byvalue --tolerance=1e-9 foo_v1.c foo_v2.c
6c6
< #define C_SQUARED 89875517873681764.0L
---
> #define C_SQUARED 8.9875517873681764e18L
8c8
< const double AVO = 6.022e23; /* Avocado number */
---
> const double AVO = 6.022e23; /* Avogadro number */
第二个差异(第 8 行)是通常的文本差异;第一个差异(第 6 行)是由于数字超出指定的容差造成的。 (指数应该是 16,而不是 18,所以相差 100.0X)。
请注意,其他浮点更改均不会显示为差异 - 即使它们是文本更改,浮点值的更改也不会超出指定的容差。
有没有可以做到这一点的比较工具?
如果没有,是否有类似的开源工具?
最佳答案
关于忽略文本中的浮点格式(但不忽略值)的 Diff 工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1428177/