Hasta donde yo sé, no hay una función predefinida para este propósito. Puede ser que sea necesario utilizar una función de este tipo, si por alguna razón cálculos de punto flotante están fuera de cuestión (por ejemplo int64_t
tiene una precisión mayor que double
puede representar sin error)
podríamos definir esta función de la siguiente manera:
#include <cmath>
inline long
floordiv (long num, long den)
{
if (0 < (num^den))
return num/den;
else
{
ldiv_t res = ldiv(num,den);
return (res.rem)? res.quot-1
: res.quot;
}
}
la idea es usar la División de enteros normales, pero ajustar para obtener resultados negativos para que coincida con el comportamiento de la función double floor(double)
. El objetivo es truncar siempre hacia el siguiente entero inferior, independientemente de la posición del punto cero. Esto puede ser muy importante si la intención es crear intervalos de tamaño uniforme.
mediciones de tiempo muestran que esta función sólo crea aquí una pequeña sobrecarga en comparación con el floor
función incorporada /
operador, pero por supuesto el punto flotante basa es significativamente más rápido ....
lo que es más funciones de números enteros? – Andrey
Tenga en cuenta que en C y C++, el operador '/' que actúa sobre enteros siempre devuelve un resultado entero. Más allá de eso, creo que necesitas ser más específico acerca de lo que quieres --- ¿tu función va a devolver el mayor entero ** menos tham ** un número dado? ¿Qué tipo va a tener ese número? Si es un 'float' o' double', tendrá pérdida de precisión independientemente. Si se trata de un modelo autóctono que modela los números ** racionales **, puede evitar la pérdida de precisión. – Pillsy
¡Es una función que devuelve el entero * más grande *! Creo que el más grande es 1,000,001 –