Код IT
← Каталог

Типы данных в C++ — Вещественные типы — `float`, `double`

Фрагмент из «Типы данных в C++»: Вещественные типы — `float`, `double`.

C++ main.cpp
#include <iostream>
#include <cmath>

bool nearlyEqual(double a, double b, double epsilon = 1e-9) {
    return std::abs(a - b) < epsilon;
}

int main() {
    double x = 0.1 + 0.2;
    double y = 0.3;

    std::cout << "x = " << x << '\n';
    std::cout << "y = " << y << '\n';
    std::cout << "x == y? " << (x == y ? "да" : "нет") << '\n';
    std::cout << "nearlyEqual(x, y)? " << (nearlyEqual(x, y) ? "да" : "нет") << '\n';

    // Для больших чисел нужен относительный эпсилон
    double a = 1e10;
    double b = a + 1.0;
    std::cout << "\nБольшие числа:\n";
    std::cout << "a = " << a << ", b = " << b << '\n';
    std::cout << "Абсолютное сравнение: " << (nearlyEqual(a, b) ? "равны" : "не равны") << '\n';

    // Относительное сравнение
    bool relEqual = std::abs(a - b) <= 1e-9 * std::max(std::abs(a), std::abs(b));
    std::cout << "Относительное сравнение: " << (relEqual ? "равны" : "не равны") << '\n';

    return 0;
}
#include <iostream>
#include <cmath>

bool nearlyEqual(double a, double b, double epsilon = 1e-9) {
    return std::abs(a - b) < epsilon;
}

int main() {
    double x = 0.1 + 0.2;
    double y = 0.3;

    std::cout << "x = " << x << '\n';
    std::cout << "y = " << y << '\n';
    std::cout << "x == y? " << (x == y ? "да" : "нет") << '\n';
    std::cout << "nearlyEqual(x, y)? " << (nearlyEqual(x, y) ? "да" : "нет") << '\n';

    // Для больших чисел нужен относительный эпсилон
    double a = 1e10;
    double b = a + 1.0;
    std::cout << "\nБольшие числа:\n";
    std::cout << "a = " << a << ", b = " << b << '\n';
    std::cout << "Абсолютное сравнение: " << (nearlyEqual(a, b) ? "равны" : "не равны") << '\n';

    // Относительное сравнение
    bool relEqual = std::abs(a - b) <= 1e-9 * std::max(std::abs(a), std::abs(b));
    std::cout << "Относительное сравнение: " << (relEqual ? "равны" : "не равны") << '\n';

    return 0;
}