FatRat — 임의 정밀도 유리수

FatRat — 임의 정밀도 유리수

일반 Rat는 정밀도가 커지면 어느 순간 Num으로 떨어져요. 그렇게 근사값으로 내려가지 않고 딱 떨어지는 유리수를 끝까지 유지하고 싶을 때 쓰는 타입이 FatRat이에요. 이름 그대로 "뚱뚱한(임의 크기의) 유리수"죠.

출처: Raku Documentation — FatRat

본문

class FatRat is Cool does Rational[Int, Int] {}

FatRat은 임의 크기의 분자와 분모로 저장되는 유리수예요. FatRat과 선택적으로 IntRat 객체가 얽힌 산술 연산은 FatRat을 반환해서 정밀도 손실을 피해요.

다만 Rat과 달리 FatRat 연산은 어느 시점에 Num으로 떨어지지 않으므로, 반복적인 산술 연산이 병적으로 큰 분자와 분모를 만들어낼 위험이 있어요.

FatRat 객체를 만드는 흔한 방법은 두 가지예요. 분자와 분모로 만드는 FatRat.new(Int, Int) 생성자를 쓰거나, IntRat 객체에 .FatRat 메서드를 호출하는 거예요.

method raku

multi method raku(FatRat:D: --> Str:D)

EVAL에 주면 동등한 객체를 만들어내는 구현별 문자열을 반환해요.

say FatRat.new(1, 2).raku; # OUTPUT: «FatRat.new(1, 2)␤»

출처: Raku Documentation — FatRat