我在尋找一個diff工具,它也可以比較文本文件中的浮點值(在一定的容差內)。這是除了典型的文本比較比較功能,以及忽略空白,忽略大小寫等選項。一個GUI(或全屏控制檯UI)是好的,但我真的更喜歡面向流(stdin /標準輸出)工具。Diff工具在文本中忽略浮點格式(但不包含值)?
下面是一個非常簡單的例子,描述了理想的工具。有2個版本的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;
}
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的輸出,我期望:
$ 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)。
請注意,即使它們是文本更改,其他浮點更改都不會顯示爲差異—,但浮點值不會超出指定的容差。
有沒有可以做到這一點的差異工具?
如果沒有,是否有東西接近,那是開源的?
哇!輸出**完全**我想要的!順便說一句,BeOS版本[http://www.bebits.com/app/3784]在Cygwin下編譯,沒有任何變化。 – 2009-09-28 23:44:06
那麼,我仍然無法在AIX上運行它。在Linux上,gcc-3.3.3編譯它,但是它在第一個「spiff Sample.1 Sample.2」上出現了segfault錯誤。在一臺較新的機器上,gcc-4.2.4很生氣: spiff.c:178:error:'_Y_doargs'的靜態聲明遵循非靜態聲明 spiff.c:30:錯誤:之前的'_Y_doargs'聲明爲這裏 – Davide 2009-09-29 16:05:53
@Davide:如果你仍然陷入困境,也許你應該在某個網站的某個地方問一個關於它的問題。 ;-) – 2009-10-02 20:47:32