Dois casos comuns a serem considerados:
Aritmética inteira
Obviamente, se você estiver usando a aritmética inteira (que trunca), você obterá um resultado diferente. Aqui está um pequeno exemplo em 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.");
}
}
Saída:
First comparison says it's not bigger.
Second comparison says it's bigger.
Aritmética de ponto flutuante
Além do fato de que a divisão pode produzir um resultado diferente quando divide por zero (gera um erro, enquanto a multiplicação não o faz), também pode resultar em erros de arredondamento ligeiramente diferentes e um resultado diferente. Exemplo simples em 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.");
}
}
Saída:
First comparison says it's not bigger.
Second comparison says it's bigger.
Caso você não acredite em mim, aqui é um Fiddle que você pode executar e ver por si mesmo.
Outros idiomas podem ser diferentes; lembre-se, no entanto, que o C #, como muitas linguagens, implementa uma biblioteca de ponto flutuante do padrão IEEE (IEEE 754) , você deve obter os mesmos resultados em outros tempos de execução padronizados.
Conclusão
Se você estiver trabalhando com greenfield , provavelmente está OK.
Se você estiver trabalhando em código legado e o aplicativo for financeiro ou outro aplicativo sensível que execute aritmética e seja necessário para fornecer resultados consistentes, tenha muito cuidado ao alterar as operações. Se você precisar, certifique-se de ter testes de unidade que detectarão quaisquer mudanças sutis na aritmética.
Se você está apenas fazendo coisas como contar elementos em uma matriz ou outras funções computacionais gerais, provavelmente estará OK. Eu não tenho certeza se o método de multiplicação torna seu código mais claro.
Se você estiver implementando um algoritmo para uma especificação, eu não mudaria nada, não apenas por causa do problema de erros de arredondamento, mas para que os desenvolvedores pudessem revisar o código e mapear cada expressão de volta à especificação para garantir há falhas de implementação.