El módulo <cfloat> de la biblioteca estándar de C++

<cfloat>es un archivo de cabecera de la biblioteca estándar de C++ que se utiliza para definir macros y constantes relacionadas con los números de punto flotante. Estas macros y constantes proporcionan información sobre la precisión, el rango, etc., de la representación de los números de punto flotante, principalmente de la biblioteca estándar de C<float.h>archivo de cabecera.

Fundamentos de los números de punto flotante

En C++, los números de punto flotante son un tipo de datos utilizado para representar números decimales. C++ proporciona dos tipos básicos de números de punto flotante:

  • float: número de punto flotante de precisión simple, normalmente ocupa 4 bytes.
  • double: número de punto flotante de doble precisión, normalmente ocupa 8 bytes.

Definición y sintaxis

En C++, puedes usarfloatodoublepara definir variables de punto flotante. Por ejemplo:

float f = 3.14f; // 使用 f 后缀表示浮点数字面量
double d = 2.718;

Operaciones de punto flotante en la biblioteca estándar

Aunque la biblioteca estándar de C++ no tiene un módulo específico "cfloat"<cmath>el archivo de cabecera proporciona muchas funciones para operaciones de punto flotante, por ejemplo:

  • sqrt: calcula la raíz cuadrada
  • pow: calcula la potencia
  • sin、cos、tan: calcula funciones trigonométricas

<cfloat>Constantes proporcionadas

1. Rango de los números de punto flotante

  • FLT_MIN:floatEl número positivo más pequeño del tipo.
  • FLT_MAX:floatEl número positivo más grande del tipo.
  • DBL_MIN:doubleEl número positivo más pequeño del tipo.
  • DBL_MAX:doubleEl número positivo más grande del tipo.
  • LDBL_MIN:long doubleEl número positivo más pequeño del tipo.
  • LDBL_MAX:long doubleEl número positivo más grande del tipo.

2. Precisión de los números de punto flotante

  • FLT_DIG:floatEl número de dígitos significativos del tipo.
  • DBL_DIG:doubleEl número de dígitos significativos del tipo.
  • LDBL_DIG:long doubleEl número de dígitos significativos del tipo.

3. Exponente negativo mínimo

  • FLT_MIN_EXP:floatEl exponente negativo mínimo del tipo.
  • DBL_MIN_EXP:doubleEl exponente negativo mínimo del tipo.
  • LDBL_MIN_EXP:long doubleEl exponente negativo mínimo del tipo.

4. Exponente positivo máximo

  • FLT_MAX_EXP:floatEl exponente positivo máximo del tipo.
  • DBL_MAX_EXP:doubleEl exponente positivo máximo del tipo.
  • LDBL_MAX_EXP:long doubleEl exponente positivo máximo del tipo.

5. Épsilon de la máquina

  • FLT_EPSILON:floatEl épsilon de la máquina del tipo, que representa el número de punto flotante más pequeño que puede distinguir 1.0 de un número mayor que 1.0.
  • DBL_EPSILON:doubleEl épsilon de la máquina del tipo.
  • LDBL_EPSILON:long doubleEl épsilon de la máquina del tipo.

Ejemplo

El siguiente ejemplo muestra cómo usar en un programa C++<cfloat>las constantes proporcionadas:

Ejemplo

#include <iostream>
#include <cfloat>

int main() {
    // Muestra el rango y la precisión del tipo float
    std::cout << "float:\n";
    std::cout << "Min: " << FLT_MIN << '\n';
    std::cout << "Max: " << FLT_MAX << '\n';
    std::cout << "Epsilon: " << FLT_EPSILON << '\n';
    std::cout << "Digits: " << FLT_DIG << '\n';

    // Muestra el rango y la precisión del tipo double
    std::cout << "\ndouble:\n";
    std::cout << "Min: " << DBL_MIN << '\n';
    std::cout << "Max: " << DBL_MAX << '\n';
    std::cout << "Epsilon: " << DBL_EPSILON << '\n';
    std::cout << "Digits: " << DBL_DIG << '\n';

    // Muestra el rango y la precisión del tipo long double
    std::cout << "\nlong double:\n";
    std::cout << "Min: " << LDBL_MIN << '\n';
    std::cout << "Max: " << LDBL_MAX << '\n';
    std::cout << "Epsilon: " << LDBL_EPSILON << '\n';
    std::cout << "Digits: " << LDBL_DIG << '\n';

    return 0;
}

Salida:

float:
Min: 1.17549e-38
Max: 3.40282e+38
Epsilon: 1.19209e-07
Digits: 6

double:
Min: 2.22507e-308
Max: 1.79769e+308
Epsilon: 2.22045e-16
Digits: 15

long double:
Min: 2.22507e-308
Max: 1.79769e+308
Epsilon: 2.22045e-16
Digits: 15

A continuación se muestra<cmath>un ejemplo sencillo del uso de las funciones del archivo de cabecera para operar con números de punto flotante:

Ejemplo

#include <iostream>
#include <cmath> // Incluye funciones matemáticas

int main() {
    double num = 9.0;
    double root = sqrt(num); // Calcula la raíz cuadrada
    double power = pow(2.0, 3.0); // Calcula 2 elevado a la 3

    std::cout << "The square root of " << num << " is " << root << std::endl;
    std::cout << "The power of 2 to the 3 is " << power << std::endl;

    return 0;
}

Salida:

The square root of 9 is 3
The power of 2 to the 3 is 8

Precauciones

  • La precisión de los números de punto flotante es limitada, por lo que al realizar operaciones con números de punto flotante pueden surgir problemas de precisión.
  • Al comparar si dos números de punto flotante son iguales, se debe usar un pequeño margen de error para decidir, en lugar de usar directamente==el operador.

Aunque "cfloat" no es parte de la biblioteca estándar de C++, C++ ofrece un sólido soporte para números de punto flotante y una biblioteca de funciones matemáticas relacionada. Mediante el uso de<cmath>el archivo de cabecera, puedes realizar fácilmente diversas operaciones con números de punto flotante. Espero que este artículo ayude a los principiantes a comprender mejor las operaciones de punto flotante en C++.

Otras extensiones