Por que a fórmula (1 * 2) * (1 / 2) em Python dá 1 e em Ruby dá 0? Tentei também (1 * 2).to_f * (1 / 2).to_f e o problema é o mesmo.
E (1 * 2) * (1 / (2).to_f)?
Dá diferença porque cada linguagem interpreta 1 / 2 de uma forma.
Em Python, o resultado da divisão é um float - ou seja, 0.5:
print(1 / 2) # 0.5
Em Ruby, o resultado é truncado/arredondado para um inteiro (e portanto é zero):
puts 1 / 2 # 0
E não adianta fazer (1 / 2).to_f, pois você só estará fazendo 0.to_f, que também será zero.
Ou seja, (1 * 2) (que é 2) é multiplicado pelo resultado de 1 / 2. Como em Python 1 / 2 é 0.5, então o resultado é igual a 1. Em Ruby, como 1 / 2 é zero, qualquer coisa multiplicado por isso dará zero.
A solução é fazer a divisão convertendo algum dos valores para float:
puts 1.to_f / 2 # 0.5
Pois assim eu forço um dos números para float, e o resultado da divisão não é mais arredondado. E aí a conta dá 1:
puts (1 * 2) * (1.to_f / 2) # 1.0
Outra opção é usar fdiv:
puts (1 * 2) * 1.fdiv(2) # 1.0
Por fim, fica a dica de sempre ler a documentação de cada linguagem (ver aqui e aqui), pois cada uma possui suas próprias regras e o que funciona para uma não necessariamente funcionará exatamente igual em outra 