Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

วิธีที่มีประสิทธิภาพมากที่สุดสำหรับการเปรียบเทียบแบบลอยตัวและแบบคู่ใน C/C++ คืออะไร


ที่นี่เราจะมาดูวิธีเปรียบเทียบข้อมูลทศนิยมสองข้อมูลหรือข้อมูลคู่สองรายการโดยใช้ C หรือ C++ การเปรียบเทียบจุดลอยตัว / คู่ไม่เหมือนกับการเปรียบเทียบจำนวนเต็ม

ในการเปรียบเทียบค่าทศนิยมสองค่าหรือค่าสองเท่า เราต้องพิจารณาความแม่นยำในการเปรียบเทียบ ตัวอย่างเช่น หากตัวเลขสองตัวคือ 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; //they are same
      return false; //they are not same
}
bool compare_float(double x, double y, double epsilon = 0.0000001f){
   if(fabs(x - y) < epsilon)
      return true; //they are same
      return false; //they are not same
}
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