การเปรียบเทียบโฟลตและตัวแปรคู่ขึ้นอยู่กับเป้าหมายสุดท้ายของคุณ หากคุณต้องการฟังก์ชันที่รันได้โดยไม่มีรายละเอียดมากเกินไป และจะไม่มีปัญหาในการคำนวณที่ไม่ถูกต้อง คุณสามารถใช้ฟังก์ชันต่อไปนี้ -
ตัวอย่าง
#include<iostream>
using namespace std;
// Define the error that you can tolerate
#define EPSILON 0.000001
bool areSame(double a, double b) {
return fabs(a - b) < EPSILON;
}
int main() {
double a = 1.005;
double b = 1.006;
cout << areSame(a, a);
cout << areSame(a, b);
} ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
1 0
ฟังก์ชันนี้ใช้ความทนทานต่อข้อผิดพลาดและตรวจสอบว่าเกณฑ์มีค่ามากกว่าความแตกต่างระหว่างตัวเลขที่คุณกำลังเปรียบเทียบหรือไม่ หากคุณต้องการบางสิ่งที่แม่นยำกว่านี้ คุณควรอ่านโพสต์บล็อกที่ยอดเยี่ยมนี้:https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/