Problema com a compilação pelo G ++: por que 5/18 retorna zero? [fechadas]

-1

Eu tenho visto um problema interessante no G + +:

quando eu uso sin (50 * 3.14 / 180) recebo algo em torno de 0,766, no entanto pecado (5/18 * 3.24) me dá 0.000.

Não é exatamente a mesma coisa? Alguém viu isso antes?

Agradecemos antecipadamente pela sua resposta.

    
por user279937 10.05.2014 / 00:15

1 resposta

2

Isso não tem nada a ver com o Ubuntu, mas ...

O motivo é que a expressão 5/18*3.24 é compilada (nesse caso, pré-calculada, mas, infelizmente, o resultado é o mesmo) que (5/18)*3.24 e interpretada da esquerda para a direita.

Agora, (5/18) é uma operação entre dois inteiros e retorna a divisão inteira entre 5 e 18, que é 0 (com o restante 5, mas você não solicitou isso). Quando você multiplica 0 e 3.14, a operação é mista, portanto, (int)0 é promovido para (double)0.0 e o resultado é, bem, 0.0 - conforme o esperado.

No outro caso, 50*3.14/180 , em primeiro lugar 50*3.14 é calculado; (int)50 é promovido para (double)50.0 e está tudo bem.

Moral: sempre use o formato correto para constantes. 5 significa (int)5 , 5.0 significa (double)5.0 , 5L significa (long int)5 , 09 significa que você não sabe C / C ++ ...

PS como uma nota secundária, esse comportamento é uma das grandes mudanças de python2 para python3. Pesquise na net por from __future__ import division se você estiver curioso.

    
por Rmano 10.05.2014 / 00:39

Tags