यहां हम देखेंगे कि C या C++ का उपयोग करके दो फ्लोटिंग पॉइंट डेटा या दो डबल डेटा की तुलना कैसे की जाए। फ्लोटिंग पॉइंट / डबल तुलना पूर्णांक तुलना के समान नहीं है।
दो फ्लोटिंग पॉइंट या डबल मानों की तुलना करने के लिए, हमें तुलना में सटीकता (precision) को ध्यान में रखना होगा। उदाहरण के लिए, यदि दो संख्याएं 3.1428 और 3.1415 हैं, तो वे 0.01 की सटीकता तक समान हैं, लेकिन उसके बाद, जैसे 0.001 पर वे समान नहीं हैं।
इस मानदंड का उपयोग करके तुलना करने के लिए, हम एक फ्लोटिंग पॉइंट संख्या को दूसरे से घटाकर निरपेक्ष मान ज्ञात करेंगे, फिर जांचेंगे कि क्या परिणाम सटीकता मान से कम है या नहीं। इससे हम तय कर सकते हैं कि वे समतुल्य हैं या नहीं।
उदाहरण
#include <iostream>
#include <cmath>
using namespace std;
bool compare_float(float x, float y, float epsilon = 0.01f){
if(fabs(x - y) < epsilon)
return true; //वे समान हैं
return false; //वे समान नहीं हैं
}
bool compare_float(double x, double y, double epsilon = 0.0000001f){
if(fabs(x - y) < epsilon)
return true; //वे समान हैं
return false; //वे समान नहीं हैं
}
int main() {
float x, y;
x = 22.0f/7.0f;
y = 3.1415f;
if(compare_float(x, y)){
cout << "They are equivalent" << endl;
} else {
cout << "They are not equivalent" << endl;
}
if(compare_float(x, y, 0.001f)){
cout << "They are equivalent" << endl;
} else {
cout << "They are not equivalent" << endl;
}
double a, b;
a = 2.03547415;
b = 2.03547428;
if(compare_float(a, b)){
cout << "They are equivalent" << endl;
} else {
cout << "They are not equivalent" << endl;
}
if(compare_float(a, b, 0.000001f)){
cout << "They are equivalent" << endl;
} else {
cout << "They are not equivalent" << endl;
}
}
आउटपुट
They are equivalent They are not equivalent They are not equivalent They are equivalent