मैं diff उपकरण ढूंढ रहा हूं जो पाठ फ़ाइलों में फ़्लोटिंग पॉइंट मानों (कुछ सहिष्णुता के भीतर) की तुलना भी कर सकता है। यह सामान्य टेक्स्ट-तुलना diff फ़ंक्शंस के अतिरिक्त है, व्हाइटस्पेस को अनदेखा करने, केस को अनदेखा करने के विकल्प आदि के साथ। एक जीयूआई (या पूर्ण-स्क्रीन कंसोल यूआई) ठीक है, लेकिन मैं वास्तव में स्ट्रीम-ओरिएंटेड (stdin/stdout) पसंद करूंगा) उपकरण।डिफ टूल जो पाठ में फ़्लोटिंग-पॉइंट प्रारूपों (लेकिन मान नहीं) को अनदेखा करता है?
यहां एक बेहद सरल उदाहरण है जो आदर्श उपकरण को चित्रित करता है।
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 */
foo.c के 2 संस्करण हैं
दूसरा अंतर (रेखा 8) सामान्य पाठ अंतर है; पहला अंतर (रेखा 6) निर्दिष्ट सहिष्णुता के बाहर होने वाली संख्याओं के कारण है। (एक्सपोनेंट 16 होना चाहिए, 18 नहीं, इसलिए यह 100.0X से बंद है)।
ध्यान दें कि अन्य फ्लोटिंग पॉइंट परिवर्तनों में से कोई भी भिन्नता — के रूप में दिखाई नहीं देता है, भले ही वे टेक्स्ट परिवर्तन हों, फ़्लोटिंग पॉइंट मान निर्दिष्ट सहिष्णुता से आगे नहीं बदलते हैं।
क्या कोई अंतर उपकरण है जो यह कर सकता है?
यदि नहीं, तो क्या कुछ करीब है, यह खुला स्रोत है?
वाह! आउटपुट ** बिल्कुल ** ** मैं चाहता था! बीटीडब्ल्यू, बीओएस संस्करण [http://www.bebits.com/app/3784] सिग्विन के तहत संकलित किए बिना संकलित। –
ठीक है, मैं अभी भी इसे AIX पर काम करने में असमर्थ हूं। लिनक्स पर, जीसीसी-3.3.3 ने संकलित किया, लेकिन यह पहले "स्पिफ नमूना 1 नमूना 2" पर segfault। एक नई मशीन पर, gcc-4.2.4 के लिए नाराज है: spiff.c: 178: त्रुटि: '_Y_doargs' की स्थिर घोषणा गैर स्थैतिक घोषणा spiff.c: 30: त्रुटि: '_Y_doargs' की पिछली घोषणा थी यहां – Davide
@ डेवाइड: यदि आप अभी भी अटक गए हैं, तो शायद आपको किसी वेबसाइट पर इसके बारे में कोई प्रश्न पूछना चाहिए। ;-) –