Dos casos comunes a considerar:
Aritmética de enteros
Obviamente, si está utilizando aritmética de enteros (lo que trunca) obtendrá un resultado diferente. Aquí hay un pequeño ejemplo en C #:
public static void TestIntegerArithmetic()
{
int newValue = 101;
int oldValue = 10;
int SOME_CONSTANT = 10;
if(newValue / oldValue > SOME_CONSTANT)
{
Console.WriteLine("First comparison says it's bigger.");
}
else
{
Console.WriteLine("First comparison says it's not bigger.");
}
if(newValue > oldValue * SOME_CONSTANT)
{
Console.WriteLine("Second comparison says it's bigger.");
}
else
{
Console.WriteLine("Second comparison says it's not bigger.");
}
}
Salida:
First comparison says it's not bigger.
Second comparison says it's bigger.
Aritmética de punto flotante
Aparte del hecho de que la división puede producir un resultado diferente cuando se divide por cero (genera un error, mientras que la multiplicación no lo hace), también puede dar como resultado errores de redondeo ligeramente diferentes y un resultado diferente. Ejemplo simple en C #:
public static void TestFloatingPoint()
{
double newValue = 1;
double oldValue = 3;
double SOME_CONSTANT = 0.33333333333333335;
if(newValue / oldValue >= SOME_CONSTANT)
{
Console.WriteLine("First comparison says it's bigger.");
}
else
{
Console.WriteLine("First comparison says it's not bigger.");
}
if(newValue >= oldValue * SOME_CONSTANT)
{
Console.WriteLine("Second comparison says it's bigger.");
}
else
{
Console.WriteLine("Second comparison says it's not bigger.");
}
}
Salida:
First comparison says it's not bigger.
Second comparison says it's bigger.
En caso de que no me creas, aquí hay un Fiddle que puedes ejecutar y ver por ti mismo.
Otros idiomas pueden ser diferentes; sin embargo, tenga en cuenta que C #, al igual que muchos idiomas, implementa una biblioteca de punto flotante IEEE estándar (IEEE 754) , por lo que debería obtener los mismos resultados en otros tiempos de ejecución estandarizados.
Conclusión
Si está trabajando greenfield , probablemente esté bien.
Si está trabajando en un código heredado, y la aplicación es una aplicación financiera o de otro tipo que realiza operaciones aritméticas y que debe proporcionar resultados consistentes, tenga mucho cuidado al cambiar las operaciones. Si es necesario, asegúrese de tener pruebas unitarias que detecten cualquier cambio sutil en la aritmética.
Si solo estás haciendo cosas como contar elementos en una matriz u otras funciones computacionales generales, probablemente estarás bien. Sin embargo, no estoy seguro de que el método de multiplicación haga que tu código sea más claro.
Si está implementando un algoritmo para una especificación, no cambiaría nada, no solo por el problema de los errores de redondeo, sino también para que los desarrolladores puedan revisar el código y asignar cada expresión a la especificación para asegurarse de que haya No hay fallas de implementación.