Estoy usando Raku para algunos cálculos, porque tiene buenos tipos numéricos. Sin embargo, tengo un problema con el uso de '.raku'
say (1/6+1/6).raku
#<1/3>
Obtenemos esto. Sin embargo,
say (1/10+1/10).raku
#0.2
¿Es un error? Esperaba <1/5>. ¿Lo que pasa?
Respuestas:
En Raku,
0.2
construye aRat
, y por lo tanto produce el mismo resultado que la escritura1/5
(que se doblará constantemente) o<1/5>
(la forma literal). Solo obtienes coma flotante en el caso de especificar un exponente (por ejemplo,2e-1
).El trabajo del método
.raku
(anteriormente conocido como el.perl
) es producir algo que redondea y produce el mismo valor siEVAL
'd. En el caso de1/5
, eso puede representarse exactamente como un decimal, por lo que producirá0.2
. Solo recurre a la representación fraccionaria cuando una forma decimal no se redondea.Siempre puede recuperar el numerador y el denominador utilizando los métodos
.numerator
y.denominator
para formatear como desee. Además, el.nude
método devuelve una lista del numerador y el denominador, que se puede unir con un/
si se desea:fuente
.nude
mejor nombre de método involuntariamente divertidoHola @ milou123 También me sorprendió un poco que el raku vuelva a la representación decimal, puedo ver que algunos contextos, como enseñar aritmética fraccional, se beneficiarían de tener un modo "mantener como rata". Dicho esto, en última instancia, tiene sentido que solo haya una forma de rastrear algo y que el decimal sea la representación predeterminada.
Por supuesto, con raku, también puedes cambiar un poco el idioma. En este caso, he inventado un nuevo operador de postfix '→' ...
No soy lo suficientemente inteligente como para averiguar si el método incorporado 'raku' puede anularse de manera similar, me gustaría ver consejos sobre cómo hacerlo de manera concisa ...
fuente