=begin pod
=TITLE role Numeric
role Numeric { ... }
Common role for numbers and types that can act as numbers.
Binary numeric operations return an object of the "wider" type:
Int narrowest
Rat
FatRat
Num
Complex widest
So for example the product of a L<Rat> and an L<Int> return a L<Rat>.
Unary operations that in pure math usually return an irrational number
generally return L<Num> in Perl 6.
=head1 Methods
=head2 Real
method Real(Numeric:D:) returns Real:D
If this C<Numeric> is equivalent to a C<Real>, return that C<Real>.
Fail with C<X::Numeric::Real> otherwise.
=head2 Int
method Int(Numeric:D:) returns Int:D
If this C<Numeric> is equivalent to a C<Real>, return the equivalent of
calling C<truncate> on that C<Real> to get an C<Int>. Fail with
C<X::Numeric::Real> otherwise.
=head2 Rat
method Rat(Numeric:D: Real $epsilon = 1.0e-6) returns Rat:D
If this C<Numeric> is equivalent to a C<Real>, return a C<Rat> which is
within C<$epsilon> of that C<Real>'s value. Fail with C<X::Numeric::Real>
otherwise.
=head2 Num
method Num(Numeric:D:) returns Num:D
If this C<Numeric> is equivalent to a C<Real>, return that C<Real> as a C<Num>
as accurately as is possible. Fail with C<X::Numeric::Real> otherwise.
=head2 ACCEPTS
multi method ACCEPTS(Numeric:D: $other)
Returns True if C<$other> is numerically the same as the invocant.
=head2 log
multi sub log(Numeric:D, Numeric $base = e) returns Numeric:D
multi method log(Numeric:D: Numeric $base = e) returns Numeric:D
Calculates the logarithm to base C<$base>. Defaults to the natural logarithm.
=head2 log10
multi sub log10(Numeric:D ) returns Numeric:D
multi method log10(Numeric:D:) returns Numeric:D
Calculates the logarithm to base 10.
=head2 exp
multi sub exp(Numeric:D, Numeric:D $base = e) returns Numeric:D
multi method exp(Numeric:D: Numeric:D $base = e) returns Numeric:D
Returns C<$base> to the power of the number, or C<e> to the power of the
number if called without a second argument.
=head2 roots
multi method roots(Numeric:D: Int:D $n) returns Positional
Returns a list of the C<$n> complex roots, which evaluate to the original
number when raised to the C<$n>th power.
=head2 abs
multi sub abs(Numeric:D ) returns Real:D
multi method abs(Numeric:D:) returns Real:D
Returns the absolute value of the number.
=head2 sqrt
mulit sub sqrt(Numeric:D) returns Numeric:D
mulit method sqrt(Numeric:D) returns Numeric:D
Returns a square root of the number. For real numbers the positive square
root is returned.
On negative real numbers, C<sqrt> returns C<NaN> rather than a complex number,
in order to not confuse people who are not familiar with complex arithemtic.
If you want to calculate complex square roots, coerce to C<Complex> first, or
use the C<roots> method.
=head2 conj
multi method conj(Numeric:D) returns Numeric:D
Returns the complex conjugate of the number. Returns the number itself for
real numbers.
=head2 Bool
multi method Bool(Numeric:D:)
Returns C<False> if the number is equivalent to zero, and C<True> otherwise.
=head2 succ
method succ(Numerid:D:)
Returns the number incremented by one (successor).
=head2 pred
method pred(Numerid:D:)
Returns the number decremented by one (predecessor).
=end pod