Sometimes coercion is transparent. Perl 6 has several numeric types which can intermix freely--such as subtracting a floating point value from an integer, as 123 - 12.1e1.

The most important types are:


Int objects store integer numbers of arbitrary size. If you write a literal that consists only of digits, such as 12, it is an Int.


Num is the floating point type. It stores sign, mantissa, and exponent, each with a fixed width. Calculations involving Num numbers are usually quite fast, though subject to limited precision.

Numbers in scientific notation such as 6.022e23 are of type Num.


Rat, short for rational, stores fractional numbers without loss of precision. It does so by tracking its numerator and denominator as integers, so mathematical operations on Rats with large components can become quite slow. For this reason, rationals with large denominators automatically degrade to Num.

Writing a fractional value with a dot as the decimal separator, such as 3.14, produces a Rat.


Complex numbers have two parts: a real part and an imaginary part. If either part is NaN, then the entire number may possibly be NaN.

Numbers in the form a + bi, where bi is the imaginary component, are of type Complex.

The following operators are available for all number types:

Таблица 11.1. Binary numeric operators

**Exponentiation: $a**$b is $a to the power of $b
divinteger division

Таблица 11.2. Unary numeric operators

+conversion to number

Most mathematical functions are available both as methods and functions, so you can write both (-5).abs and abs(-5).

Таблица 11.3. Mathematical functions and methods

absabsolute value
sqrtsquare root
lognatural logarithm
log10logarithm to base 10
ceilrounding up to an integer
floorrounding down to an integer
roundrounding to next integer
sign-1 for negative, 0 for zero, 1 for positive values

The trigonometric functions sin, cos, tan, asin, acos, atan, sec, cosec, cotan, asec, acosec, acotan, sinh, cosh, tanh, asinh, acosh, atanh, sech, cosech, cotanh, asech, acosech and acotanh work in units of radians by default. You may specify the unit with an argument of Degrees, Gradians or Circles. For example, 180.sin(Degrees) is approximately 0.