CodeNebula
C++98stlbeginner

\<cfloat\>

C++98 · The Foundation · Compiler flag: -std=c++98

Explanation

Defines constants for the limits of floating-point types such as `FLT_MAX`, `FLT_MIN`, `DBL_EPSILON`, `FLT_DIG`, etc.

Real-World Scenario

Compare floating-point values with an epsilon tolerance in a physics engine.

Quick Snippet

snippet.cpp
#include <cfloat>
bool equal = std::abs(a - b) < DBL_EPSILON;

Full Example

cfloat.cpp
// CodeNebula - C++98 Example: <cfloat> floating-point limits
// Compile: g++ -std=c++98 -Wall -Wextra -o example cfloat.cpp

#include <iostream>
#include <cfloat>
#include <iomanip>

int main() {
    std::cout << "=== Float ===" << std::endl;
    std::cout << "FLT_MIN:       " << FLT_MIN << std::endl;
    std::cout << "FLT_MAX:       " << FLT_MAX << std::endl;
    std::cout << "FLT_EPSILON:   " << FLT_EPSILON << std::endl;
    std::cout << "FLT_DIG:       " << FLT_DIG << std::endl;
    std::cout << "FLT_MANT_DIG:  " << FLT_MANT_DIG << std::endl;

    std::cout << "\n=== Double ===" << std::endl;
    std::cout << "DBL_MIN:       " << DBL_MIN << std::endl;
    std::cout << "DBL_MAX:       " << DBL_MAX << std::endl;
    std::cout << "DBL_EPSILON:   " << DBL_EPSILON << std::endl;
    std::cout << "DBL_DIG:       " << DBL_DIG << std::endl;
    std::cout << "DBL_MANT_DIG:  " << DBL_MANT_DIG << std::endl;

    std::cout << "\n=== Long Double ===" << std::endl;
    std::cout << "LDBL_MIN:      " << LDBL_MIN << std::endl;
    std::cout << "LDBL_MAX:      " << LDBL_MAX << std::endl;
    std::cout << "LDBL_EPSILON:  " << LDBL_EPSILON << std::endl;
    std::cout << "LDBL_DIG:      " << LDBL_DIG << std::endl;

    // Practical: demonstrate epsilon significance
    double a = 1.0;
    double b = a + DBL_EPSILON;
    double c = a + DBL_EPSILON / 2.0;

    std::cout << std::setprecision(20);
    std::cout << "\n=== Epsilon Demo ===" << std::endl;
    std::cout << "1.0 == 1.0 + eps:     " << (a == b ? "equal" : "different") << std::endl;
    std::cout << "1.0 == 1.0 + eps/2:   " << (a == c ? "equal" : "different") << std::endl;

    return 0;
}

// Expected output (platform-dependent values):
// === Float ===
// FLT_MIN:       1.17549e-38
// FLT_MAX:       3.40282e+38
// FLT_EPSILON:   1.19209e-07
// FLT_DIG:       6
// FLT_MANT_DIG:  24
//
// === Double ===
// DBL_MIN:       2.22507e-308
// DBL_MAX:       1.79769e+308
// DBL_EPSILON:   2.22045e-16
// DBL_DIG:       15
// DBL_MANT_DIG:  53
//
// === Long Double ===
// LDBL_MIN:      <platform-dependent>
// LDBL_MAX:      <platform-dependent>
// LDBL_EPSILON:  <platform-dependent>
// LDBL_DIG:      <platform-dependent>
//
// === Epsilon Demo ===
// 1.0 == 1.0 + eps:     different
// 1.0 == 1.0 + eps/2:   equal
Run command
g++ -std=c++98 -Wall -Wextra -o example cfloat.cpp