Ошибки с собственными значениями не всегда очевидны.
В основном это говорит о том, что Крыса не является Числом.
3.14
является Крысой.(Рационально)
say 3.14.^name; # Rat
say 3.14.nude.join('/'); # 157/50
Вы можете просто всегда приводить значение Num каждый раз, когда вызываете его.
lgamma( $x.Num )
Это не так уж и здорово.
Я бы просто обернул нативную сабвуфер в другую, которая приводит все действительные числа к Num.
(Реальное - это все числовые, кроме сложных)
sub lgamma ( Num(Real) \n --> Num ){
use NativeCall;
sub lgamma (num64 --> num64) is native {}
lgamma( n )
}
say lgamma(3); # 0.6931471805599453
say lgamma(3.14); # 0.8261387047770286