การเปรียบเทียบโฟลตและตัวแปรคู่ขึ้นอยู่กับเป้าหมายสุดท้ายของคุณ หากคุณต้องการฟังก์ชันที่รันได้โดยไม่มีรายละเอียดมากเกินไป และจะไม่มีปัญหาในการคำนวณที่ไม่ถูกต้อง คุณสามารถใช้ฟังก์ชันต่อไปนี้ -
ตัวอย่าง
#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/