# role Numeric

Number or object that can act as a number

Common role for numbers and types that can act as numbers.

Binary numeric operations return an object of the "wider" type:

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:

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

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

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

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

Returns the number converted to the narrowest type that can hold it without loss of precision.

## method ACCEPTS

Returns `True` if `\$other` can be coerced to Numeric and is numerically equal to the invocant (or both evaluate to `NaN`).

## routine log

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

Calculates the logarithm to base 10. Returns `NaN` for negative arguments and `-Inf` for `0`.

## routine log2

Calculates the logarithm to base 2. Returns `NaN` for negative arguments and `-Inf` for `0`.

## routine exp

Returns `\$base` to the power of the number, or `e` to the power of the number if called without a second argument.

## method roots

Returns a list of the `\$n` complex roots, which evaluate to the original number when raised to the `\$n`th power.

## routine abs

Returns the absolute value of the number.

## routine sqrt

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

Returns the complex conjugate of the number. Returns the number itself for real numbers.

## method Bool

Returns `False` if the number is equivalent to zero, and `True` otherwise.

## method succ

Returns the number incremented by one (successor).

## method pred

Returns the number decremented by one (predecessor).