División exacta doble.
Considere la siguiente función:
auto f(double a, double b) -> int
{
return std::floor(a/b);
}
Por lo tanto, quiero calcular el entero más grande k
tal que k * b <= a
en un sentido matemático.
Como puede haber errores de redondeo, no estoy seguro de si la función anterior realmente calcula este k
. No me preocupa el caso en que k
pueda estar fuera del rango.
¿Cuál es la forma adecuada de determinar este k
con seguridad?
davy.ai
La forma adecuada de determinar
k
sin preocuparse por errores de redondeo sería utilizar la división entera en lugar de la división de punto flotante. Esto se puede lograr convirtiendoa
yb
a enteros y luego realizando la operación de división de piso. La función actualizada se vería así:Utilizar la división entera en lugar de la división de punto flotante asegura que el resultado siempre se redondee hacia abajo al entero más cercano, lo cual es lo que queremos en este caso. Este enfoque evita cualquier posible error de redondeo que pueda ocurrir debido a operaciones de punto flotante.