sys*_*USE 8 floating-point diff
我正在寻找一个diff工具,它也可以比较文本文件中的浮点值(在一定容差范围内).这是典型的文本比较差异函数的补充,具有忽略空格,忽略大小写等的选项.GUI(或全屏控制台UI)是可以的,但我真的更喜欢面向流(stdin/stdout) )工具.
这是一个非常简单的例子,是理想工具的特征.有两个版本的foo.c:
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;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
这是我期望的差异输出:
$ 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 */
Run Code Online (Sandbox Code Playgroud)
第二个差异(第8行)是通常的文本差异; 第一个差异(第6行)是由于数字超出了规定的公差.(指数应为16,而不是18,所以它是100.0X).
请注意,没有其他浮点更改显示为差异 - 即使它们是文本更改,浮点值也不会更改超出指定的容差.
有没有可以做到这一点的差异工具?
如果没有,是否有接近的东西,这是开源的吗?
有一个,看起来很有趣.我正试图让它在我的AIX上工作,所以我似乎还没有采取行动,但我相信这就是你(和我:-)需要的
http://hpux.connect.org.uk/hppd/hpux/Text/spiff-1.0/