Cuentas / C++17

Reales, redondeo y precisión

Llevar al apunte ↗

Descripción

double permite representar valores con parte decimal de forma aproximada. Usalo cuando el enunciado admite un margen de error o el cálculo requiere longitudes, ángulos o cocientes decimales. long double puede aportar más precisión según la plataforma.

floor, ceil y round devuelven valores de punto flotante redondeados. Para convertirlos a un entero, el resultado debe caber en el tipo de destino. Una raíz que representa un índice o un divisor exacto requiere corregir la aproximación con cuentas enteras.

Las funciones trigonométricas reciben radianes. Para imprimir decimales, fixed y setprecision permiten controlar la cantidad de cifras después del punto. Elegí esa cantidad de acuerdo con el error que admite la salida.

Funciones y operaciones

Uso Condición Resultado
double(a) / b b distinto de cero Cociente decimal
sqrt(x) x >= 0 Raíz cuadrada aproximada
floor(x) / ceil(x) Valor real finito Piso / techo como real
round(x) Valor real finito Entero más cercano como real, con mitades alejándose de cero
abs(x) x real Valor absoluto
acos(-1.0) Constante válida Aproximación de pi
sin(r) / cos(r) / tan(r) Ángulo en radianes y función definida Valor trigonométrico
cout << fixed << setprecision(d) Cantidad de decimales Cambia el formato de las siguientes salidas reales

Ejemplos

División y redondeo

int a = 11, b = 4;
double cociente = static_cast<double>(a) / b; // 2.75
long long piso = static_cast<long long>(floor(cociente)); // 2
long long techo = static_cast<long long>(ceil(cociente)); // 3

Imprimir decimales

double valor = 2.5;
cout << fixed << setprecision(4) << valor << '\n';
// Salida: 2.5000

Obtener el piso exacto de una raíz entera

long long n = 35;
long long r = static_cast<long long>(sqrt(static_cast<long double>(n)));
while (r + 1 <= n / (r + 1)) ++r;
while (r > 0 && r > n / r) --r;
// r vale 5

El ejemplo sirve para n >= 0. Las divisiones evitan calcular productos que podrían desbordar al corregir la raíz.

Pasar de grados a radianes

double grados = 45.0;
double radianes = grados * acos(-1.0) / 180.0;
double altura = 10.0;
double longitud = altura / tan(radianes); // Aproximadamente 10

El significado de la fórmula depende de la geometría del enunciado. La conversión de unidades se hace antes de llamar a la función trigonométrica.