it-swarm-pt.tech

O uso de incremento (operador ++) em carros alegóricos é ruim?

É considerado "mau estilo" usar o operador de incremento (++) em carros alegóricos? Compila muito bem, mas acho fedorento e contra-intuitivo.

A pergunta: em que casos está usando ++ na variável flutuante justificada e melhor que += 1.0f? Se não houver casos de uso, existe um guia de estilo C++ respeitável que diga explicitamente que ++ no float é mau?

Para float ++, não é incrementado pelo menor valor possível, mas por 1,0. 1.0f não tem significado especial (diferente do número inteiro 1). Isso pode confundir o leitor, fazendo com que ele pense que a variável é int.

Para float, não é garantido que o operador ++ altere o argumento. Por exemplo, o seguinte loop não é infinito:

float i, j;
for (i=0.0, j=1.0; i!=j;i=j++);

Conseqüentemente, fazer ++ imediatamente após - não garante que o valor seja inalterado.

22
Muxecoid

Em geral ++/-- não está definido para flutuadores, pois não está claro com qual valor o flutuador deve ser incrementado. Então, você pode ter sorte em um sistema em que ++ leva a f += 1.0f mas pode haver situações em que isso não é válido. Portanto, para carros alegóricos, você precisará fornecer um valor específico.

++/-- é definido como "incremento/decréscimo de 1". Portanto, isso é aplicável aos valores de ponto flutuante. No entanto, pessoalmente, eu acho que isso pode ser confuso para alguém que não está ciente dessa definição (ou apenas a aplica a números inteiros), então eu recomendaria usar f += 1.0f.

16
Sebastian Dressler

Quando você adiciona muitos 1.0 para um flutuador, devido à aritmética de ponto flutuante, você pode estar um pouco fora no final

A melhor maneira é fazer

for ( int i = 0; i < 100; i++ )
{
     float f = 2.433f + i * 1.0f;

ao invés de

for ( float f = 2.433f; f < 102.433f; f += 1.0f )

No segundo caso, o erro aritmético do ponto flutuante aumenta e, no primeiro caso, não. Como alguns usuários apontaram nos comentários abaixo, adicionar flutuadores de integrais pode não acumular erros, mas, em geral, é uma boa idéia evitá-lo.

15
parapura rajkumar

Não há nada errado em usar ++ e -- em operandos flutuantes ou duplos. Simplesmente adiciona ou subtrai 1. É para isso que serve!

10
TonyK

É um estilo ruim. ++ e -- tem como objetivo definir um lvalue para seu valor seguinte ou anterior, como o número inteiro próximo ou anterior, o elemento seguinte ou anterior em uma matriz (para ponteiros), o elemento seguinte ou anterior em um contêiner (iteradores), etc.

Os valores seguintes e anteriores não estão bem definidos para carros alegóricos. Faz f += 1. explicitamente.

4
Fred Foo