忽略文本中的浮点格式(但不忽略值)的 Diff 工具?

标签 diff floating-point

我正在寻找一个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)。

请注意,其他浮点更改均不会显示为差异 - 即使它们是文本更改,浮点值的更改也不会超出指定的容差。

有没有可以做到这一点的比较工具?

如果没有,是否有类似的开源工具?

最佳答案

我最近发现的:

http://www.nongnu.org/numdiff/

非常直观。

关于忽略文本中的浮点格式(但不忽略值)的 Diff 工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1428177/

相关文章:

html - 如何判断两个网页是否完全相同

database - 有没有办法获得关于两个 Jet (.mdb) 数据库的差异报告?

ruby-on-rails - 版本化的 rails db 和不同

matlab - 四舍五入到 n 位有效数字

regex - 如何仅在 diff block 中搜索 - gvim diff

.net - WinForms 或 WPF 的文本差异可视化控件

java - Java中的加法顺序

php - 在 mysqli 中处理小数

java - 如何在 Spark sql 中舍入值

c++ - 如何生成格式为 HxHHHHHHHH 的 NSString,表示 Objective C、C++ 或 C 中的浮点值?