Estou usando o Raku para alguns cálculos, porque possui bons tipos numéricos. No entanto, tenho um problema ao usar '.raku'
say (1/6+1/6).raku
#<1/3>
Nós obtemos isso. Contudo,
say (1/10+1/10).raku
#0.2
Isso é um bug? Eu esperava <1/5>. O que acontece?
Respostas:
Em Raku,
0.2
constrói aRat
e, portanto, produz o mesmo resultado que a escrita1/5
(que será dobrada constantemente) ou<1/5>
(a forma literal). Você só obtém ponto flutuante no caso de especificar um expoente (por exemplo,2e-1
).O trabalho do método
.raku
(anteriormente conhecido como.perl
) é produzir algo que irá percorrer e produzir o mesmo valor seEVAL
'd. No caso de1/5
, isso pode ser representado exatamente como um decimal, portanto será produzido0.2
. Ele apenas recorre à representação fracionária quando uma forma decimal não ida e volta.Você sempre pode recuperar o numerador e o denominador usando os métodos
.numerator
e.denominator
para formatar como desejar. Além disso, o.nude
método retorna uma lista do numerador e denominador, ao qual se pode juntar um/
se desejado:fonte
.nude
melhor nome do método engraçado sem quererOi @ milou123 Também fiquei um pouco surpreso ao ver que o raku reverte para representação decimal - posso ver que alguns contextos - como ensinar aritmética fracionária se beneficiariam de ter um modo "manter como rato". Dito isto, em última análise, faz sentido que haja apenas uma maneira de criar algo e que decimal seja a representação padrão.
Obviamente, com o raku, você também pode mudar um pouco o idioma. Nesse caso, eu inventei um novo operador postfix '→' ...
Eu não sou inteligente o suficiente para descobrir se o método 'raku' embutido pode ser substituído de uma maneira semelhante, gostaria de ver conselhos sobre como fazer isso de forma concisa ...
fonte