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.