ফ্লোটিং পয়েন্ট সংখ্যা সরাসরি == দিয়ে তুলনা করা যাবে না (প্রিসিশন এরর)। টলারেন্স (epsilon) ব্যবহার করতে হয়।
সিম্পল ফাংশন (Epsilon-based)
#include <iostream>
#include <cmath>
using namespace std;
const double EPSILON = 0.000001;
bool areSame(double a, double b) {
return fabs(a - b) < EPSILON;
}
int main() {
double a = 1.005, b = 1.006;
cout << areSame(a, a) << endl; // 1 (true)
cout << areSame(a, b) << endl; // 0 (false)
}
আউটপুট
1 0
উন্নত পদ্ধতি (Relative comparison): বড় সংখ্যার জন্য আبسোলিউট epsilon কাজ করে না। ULPs (Units in Last Place) বা রিলেটিভ কম্পারিজন ব্যবহার করুন।
রেফারেন্স: "Comparing Floating Point Numbers" by Bruce Dawson (randomascii.wordpress.com) - এই টপিকের বাইবেল।
C++20: std::cmp_equal, std::cmp_less ইত্যাদি (<utility>) ইন্টিজার/ফ্লোট সেফ কম্পারিজনের জন্য যোগ হয়েছে।