Можем ли мы использовать! 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;
}
Другие вопросы по тегам