Можем ли мы использовать! Islessgreater(float a, float b), чтобы проверить a==b, если a и b не являются nan
Чтобы проверить, равны ли две переменные с плавающей точкой, мы не можем использовать что-то вроде a==b. Но как насчет использования функции islessgreater() из заголовочного файла?
С C++11 есть три перегрузки, как показано ниже
bool islessgreater (float x , float y);
bool islessgreater (double x , double y);
bool islessgreater (long double x, long double y);
РЕДАКТИРОВАТЬ #1 Я знаю, что есть несколько обходных путей для проверки равенства двух переменных с плавающей точкой от многих парней. Например, Сравнение с плавающей точкой из Boost Как правильно и стандартно сравнить поплавки?
Что меня беспокоит, так это то, можем ли мы использовать стандартную функцию islessgreater() в C++11 для проверки (float a == float b) или нет? Например
int main() {
float a = 1E-10;
float b = 1.001E-10;
bool res = !isnan(a) && !isnan(b) && !islessgreater(a, b);
std::cout << std::boolalpha;
if (res) std::cout << "a == b" << endl;
else std::cout << "a != b" << endl;
return 0;
}
1 ответ
Я не знаю, почему вы упомянули x == у не работает. Следующий код отлично работает в C++ для сравнения двух переменных с плавающей точкой:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
bool result;
float x = 5.1235;
float y = 5.1235;
result = x == y;
cout << result;
return 0;
}