Your skill will accomplishwhat the force of many cannot PerlMonks

### perl6 rational number problem

by freakcoco (Sexton)
 on Nov 21, 2017 at 04:14 UTC Need Help??

freakcoco has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monk, I love perl6 number, it use rationals number by defulat.
But how about large number? can I use it by default?
some code like that:
my Rat @example =  1 , * ** 0.9999 ... Inf;
This work fine on  @example[^4]
But when the number going bigger , it will stored float point by default and type check fail.
How can i fix that?

fixed question: Addition 、 Subtraction 、Multiplication 、 Division 、 Modulo
```my Rat @ex01 = 1.0 , * + 0.9999 ... Inf;
my Rat @ex02 = 1.0 , * - 0.9999 ... Inf;
my Rat @ex03 = 1.0 , * * 0.9999 ... Inf;
my Rat @ex04 = 1.0 , * / 0.9999 ... Inf;
my Rat @ex05 = 1.0 , * % 0.9999 ... Inf;
my %ex = :add(@ex01), :substrat(@ex02), :mult(@ex03),
div(@ex04), mod(@ex05);

try {
for < add substrat mult div mod > -> \$op {
for 1 .. 20 -> \$count {
.say;
(%ex{\$op})[\$count]
}
}
}
This try will fail in Multiplication and Division
Why?
How to fix it?

Replies are listed 'Best First'.
Re: perl6 rational number problem
by NetWallah (Canon) on Nov 21, 2017 at 05:42 UTC
You will first need to fix your example. Here is what I get when I tried your syntax:
```> my Rat @example =  1 , * ** 0.9999 ... Inf;
[...]
> @example[^4]
Type check failed in assignment to @example; expected Rat but got Int
in block <unit> at <unknown file>:1
So the initial assignment is failing because "1" is not a Rat. That piece can be fixed, and re-tried:

```> my Rat @example =  1.0, * ** 0.9999 ... Inf;
[...]
> @example[^4]
Type check failed in assignment to @example; expected Rat but got Num
in block <unit> at <unknown file>:1

> @example[0]
1
A little further that time .. We successfully assigned "1" to @example[0], but that is all. The next element is a "Num", not a Rat, so the assignment failed.

Another problem with the sequence is that it is not increasing to Infinity. Not sure what the intent is here.

If you use an increasing Rat sequence, it works:

```> my Rat @example =  1.0, * += 0.9999 ... Inf;
[...]
> @example[^4]
(1 1.9999 2.9998 3.9997)

All power corrupts, but we need electricity.

Yes
I need to fix my question.
exponentiation not in range of rational number(something like 2.sqrt() , and there have no exponentiation base stored in perl6 and most of program language, maybe there have moudle handle that)
this is my question
ration number on the common operator
Addition 、 Subtraction 、Multiplication 、 Division 、 Modulo
online run
```my Rat @ex01 = 1.0 , * + 0.9999 ... Inf;
my Rat @ex02 = 1.0 , * - 0.9999 ... Inf;
my Rat @ex03 = 1.0 , * * 0.9999 ... Inf;
my Rat @ex04 = 1.0 , * / 0.9999 ... Inf;
my Rat @ex05 = 1.0 , * % 0.9999 ... Inf;
my %ex = :add(@ex01), :substrat(@ex02), :mult(@ex03),
div(@ex04), mod(@ex05);

try {
for < add substrat mult div mod > -> \$op {
for 1 .. 20 -> \$count {
"\$op   \$count".say;
(%ex{\$op})[\$count]
}
}
}
this try will fail in Multiplication and Division.
why?
You need FatRats.
```> my @a = 1.0, * * 0.9999... *;
[...]
> my @b = FatRat(1.0), * * 0.9999... *;
[...]
> say \$_, ' ', \$_.WHAT for @a[^10];
1 (Rat)
0.9999 (Rat)
0.99980001 (Rat)
0.999700029999 (Rat)
0.9996000599960001 (Rat)
0.99950009999 (Num)
0.999400149980001 (Num)
0.999300209965003 (Num)
0.999200279944007 (Num)
0.999100359916013 (Num)
> say \$_, ' ', \$_.WHAT for @b[^10];
1 (FatRat)
0.9999 (FatRat)
0.99980001 (FatRat)
0.999700029999 (FatRat)
0.9996000599960001 (FatRat)
0.99950009999000049999 (FatRat)
0.999400149980001499940001 (FatRat)
0.9993002099650034997900069999 (FatRat)
0.99920027994400699944002799920001 (FatRat)
0.999100359916012598740083996400089999 (FatRat)
Re: perl6 rational number problem
by Anonymous Monk on Nov 21, 2017 at 08:55 UTC
You have to use FatRat instead of Rat.
```> my Rat \$x = 0.9 ** 20;
Type check failed in assignment to \$x; expected Rat but got Num (0.121
+576654590569e0)
> my FatRat \$y = FatRat(0.9) ** 20;
0.12157665459056928801

Create A New User
Node Status?
node history
Node Type: perlquestion [id://1203857]
Approved by haukex
Front-paged by virtualsue
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (9)
As of 2021-04-15 12:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?