role Numeric
Number or object that can act as a number
1 | Methods |
1.1 | method Numeric |
1.2 | method Int |
1.3 | method Rat |
1.4 | method Num |
1.5 | method narrow |
1.6 | method ACCEPTS |
1.7 | routine log |
1.8 | routine log10 |
1.9 | routine exp |
1.10 | method roots |
1.11 | routine abs |
1.12 | routine sqrt |
1.13 | method conj |
1.14 | method Bool |
1.15 | method succ |
1.16 | method pred |
2 | Type Graph |
Common role for numbers and types that can act as numbers.
Binary numeric operations return an object of the "wider" type:
Int narrowestRatFatRatNumComplex widest
So for example the product of a Rat and an Int is a Rat.
Unary operations that in pure math usually return an irrational number generally return Num in Raku.
Methods
method Numeric
Defined as:
multi method Numeric(Numeric: --> Numeric)multi method Numeric(Numeric: --> Numeric)
The :D
variant simply returns the invocant. The :U
variant issues a warning about using an uninitialized value in numeric context and then returns self.new
.
method Int
method Int(Numeric: --> Int)
If this Numeric
is equivalent to a Real
, return the equivalent of calling truncate
on that Real
to get an Int
. Fail with X::Numeric::Real
otherwise.
method Rat
method Rat(Numeric: Real = 1.0e-6 --> Rat)
If this Numeric
is equivalent to a Real
, return a Rat
which is within $epsilon
of that Real
's value. Fail with X::Numeric::Real
otherwise.
method Num
method Num(Numeric: --> Num)
If this Numeric
is equivalent to a Real
, return that Real
as a Num
as accurately as is possible. Fail with X::Numeric::Real
otherwise.
method narrow
method narrow(Numeric --> Numeric)
Returns the number converted to the narrowest type that can hold it without loss of precision.
say (4.0 + 0i).narrow.perl; # OUTPUT: «4»say (4.0 + 0i).narrow.^name; # OUTPUT: «Int»
method ACCEPTS
multi method ACCEPTS(Numeric: )
Returns True
if $other
can be coerced to Numeric and is numerically equal to the invocant (or both evaluate to NaN
).
routine log
multi sub log(Numeric, Numeric = e --> Numeric)multi method log(Numeric: Numeric = e --> Numeric)
Calculates the logarithm to base $base
. Defaults to the natural logarithm. Returns NaN
if $base
is negative. Throws an exception if $base
is 1
.
routine log10
multi sub log10(Numeric --> Numeric)multi method log10(Numeric: --> Numeric)
Calculates the logarithm to base 10. Returns NaN
for negative arguments and -Inf
for 0
.
routine exp
multi sub exp(Numeric, Numeric = e --> Numeric)multi method exp(Numeric: Numeric = e --> Numeric)
Returns $base
to the power of the number, or e
to the power of the number if called without a second argument.
method roots
multi method roots(Numeric: Int --> Positional)
Returns a list of the $n
complex roots, which evaluate to the original number when raised to the $n
th power.
routine abs
multi sub abs(Numeric --> Real)multi method abs(Numeric: --> Real)
Returns the absolute value of the number.
routine sqrt
multi sub sqrt(Numeric --> Numeric)multi method sqrt(Numeric --> Numeric)
Returns a square root of the number. For real numbers the positive square root is returned.
On negative real numbers, sqrt
returns NaN
rather than a complex number, in order to not confuse people who are not familiar with complex arithmetic. If you want to calculate complex square roots, coerce to Complex
first, or use the roots
method.
method conj
multi method conj(Numeric --> Numeric)
Returns the complex conjugate of the number. Returns the number itself for real numbers.
method Bool
multi method Bool(Numeric:)
Returns False
if the number is equivalent to zero, and True
otherwise.
method succ
method succ(Numeric:)
Returns the number incremented by one (successor).
method pred
method pred(Numeric:)
Returns the number decremented by one (predecessor).