Precisión de números de punto flotante en C++ (piso(), ceil(), trunc(), redondo() y setprecision())

El equivalente decimal de 1/3 es 0.33333333333333…. Un número de longitud infinita requeriría una memoria infinita para almacenar, y normalmente tenemos 4 u 8 bytes. Por lo tanto, los números de coma flotante almacenan solo una cierta cantidad de dígitos significativos y el resto se pierde. La precisión de un número de punto flotante define cuántos dígitos significativos puede representar sin pérdida de información. Al generar números de punto flotante, cout tiene una precisión predeterminada de 6 y trunca cualquier cosa después de eso. A continuación se muestran algunas bibliotecas y métodos que se utilizan para proporcionar precisión a los números de coma flotante en C++:

1. Método Floor()

Floor redondea el valor dado al entero más cercano que sea menor que el valor dado. Se define en el archivo de encabezado <cmath> .

CPP

// C++ program to demonstrate working of floor()
// in C/C++
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    double x = 1.411, y = 1.500, z = 1.711;
    cout << floor(x) << endl;
    cout << floor(y) << endl;
    cout << floor(z) << endl;
 
    double a = -1.411, b = -1.500, c = -1.611;
    cout << floor(a) << endl;
    cout << floor(b) << endl;
    cout << floor(c) << endl;
    return 0;
}
Producción

1
1
1
-2
-2
-2

2. Método ceil()

Ceil redondea el valor dado al entero más cercano que es mayor que el valor dado. Se define en el archivo de encabezado <cmath> .

CPP

// C++ program to demonstrate working of ceil()
// in C/C++
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    double x = 1.411, y = 1.500, z = 1.611;
    cout << ceil(x) << endl;
    cout << ceil(y) << endl;
    cout << ceil(z) << endl;
 
    double a = -1.411, b = -1.500, c = -1.611;
    cout << ceil(a) << endl;
    cout << ceil(b) << endl;
    cout << ceil(c) << endl;
    return 0;
}
Producción

2
2
2
-1
-1
-1

3. Método trunc()

Trunc redondea eliminar dígitos después del punto decimal. Se define en el archivo de encabezado <cmath> .

CPP

// C++ program to demonstrate working of trunc()
// in C/C++
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    double x = 1.411, y = 1.500, z = 1.611;
    cout << trunc(x) << endl;
    cout << trunc(y) << endl;
    cout << trunc(z) << endl;
 
    double a = -1.411, b = -1.500, c = -1.611;
    cout << trunc(a) << endl;
    cout << trunc(b) << endl;
    cout << trunc(c) << endl;
    return 0;
}
Producción

1
1
1
-1
-1
-1

4. ronda()

Las rondas dieron números al entero más cercano. Se define en los archivos de encabezado: <cmath> y <ctgmath> .

CPP

// C++ program to demonstrate working of round()
// in C/C++
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    double x = 1.411, y = 1.500, z = 1.611;
 
    cout << round(x) << endl;
    cout << round(y) << endl;
    cout << round(z) << endl;
 
    double a = -1.411, b = -1.500, c = -1.611;
    cout << round(a) << endl;
    cout << round(b) << endl;
    cout << round(c) << endl;
    return 0;
}
Producción

1
2
2
-1
-2
-2

5. establecerprecisión()

Setprecision cuando se usa junto con ‘fixed’ proporciona precisión a los números de coma flotante correctos a los números decimales mencionados en los corchetes de setprecision. Se define en el archivo de cabecera <iomanip>.

CPP

// C++ program to demonstrate
// working of setprecision()
// in C/C++
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    double pi = 3.14159, npi = -3.14159;
    cout << fixed << setprecision(0) << pi << " " << npi
         << endl;
    cout << fixed << setprecision(1) << pi << " " << npi
         << endl;
    cout << fixed << setprecision(2) << pi << " " << npi
         << endl;
    cout << fixed << setprecision(3) << pi << " " << npi
         << endl;
    cout << fixed << setprecision(4) << pi << " " << npi
         << endl;
    cout << fixed << setprecision(5) << pi << " " << npi
         << endl;
    cout << fixed << setprecision(6) << pi << " " << npi
         << endl;
}
Producción

3 -3
3.1 -3.1
3.14 -3.14
3.142 -3.142
3.1416 -3.1416
3.14159 -3.14159
3.141590 -3.141590

Nota: Cuando el valor mencionado en setprecision() excede la cantidad de dígitos de punto flotante en el número original, se agrega 0 al dígito de punto flotante para que coincida con la precisión mencionada por el usuario.

También existen otros métodos para proporcionar precisión a los números de coma flotante. Los mencionados anteriormente son algunos de los métodos más utilizados para proporcionar precisión a los números de punto flotante durante la codificación competitiva.
Este artículo es una contribución de Aditya Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *