es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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 convirtiendo a y b a enteros y luego realizando la operación de división de piso. La función actualizada se vería así:

    auto f(double a, double b) -> int{
      int ia = static_cast<int>(a);
      int ib = static_cast<int>(b);
      return ia/ib;
    }
    

    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.

Comments are closed.