Any of the above forms of numerical expression can be used where Pop-11 requires an expression, e.g. to assign values to variables, or to give arguments to procedures requiring numerical arguments. Mathematical procedures provided by Pop-11 are listed below, including the standard arithmetical operators (+, -, *, /), trigonometrical functions (sin, cos, tan) and others.
Starting from expressions denoting numbers we can create more complicated expressions denoting numbers. E.g.
    33 + 44     denotes the number 7
    sqrt(9)     denotes the number 3.0
    max(4, 77)  denotes the number 77.
Arithmetic expressions can be embedded in others. For example
the expression
tan(23 + 22)contains sub-expressions 23, 22, and 23 + 22.
Finally
max(min(66, 33), min(999, 9))denotes the number 33, as does this:
    max( min(66-5, 33), min(999, 9+9) ) =>
    ** 33
Exercise:
    How many different expressions does the last example contain?
Pop-11 will read in binary numbers if they are preceded by `2:'
    2:111 =>
    ** 7
Similarly octal numbers may be preceded by `8:'
    8:111 =>
    ** 73
This sort of prefix can be used for non-integer numbers too:
    8:11.11 =>
    ** 9.140625
    10:55.55 =>
    ** 55.55
The integer base used for reading in non-decimal numbers must be in the
range 2-36. If the base is greater than 10, the letters A-Z (uppercase
only) can be used in the number to represent digit values from 10 to 35,
e.g. 16:1FFA represents 8186 as a hexadecimal number.
Note: the same internal representation is used, no matter how the number is read in. So how the number prints out is not affected. E.g.
    2:111, 7 =>
    ** 7   7
    2:111 == 7 =>
    ** <true>
How numbers are printed is controlled using pop_pr_radix, which defaults to 10. By making it 16 numbers can be printed in hexadecimal, for instance:
    16 -> pop_pr_radix;
    16 =>
    ** 10
    15 =>
    ** F
You can define a procedure to print numbers in binary form thus:
    define pr_binary(num);
        dlocal pop_pr_radix = 2;
        pr(num)
    enddefine;
    vars x;
    for x from 1 to 15 do pr_binary(x); pr(space) endfor;
    1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111
The printing of decimal (floating point) numbers is also controlled by pop_pr_radix.
    16 -> pop_pr_radix;
    15.55 =>
    ** F.8CCCCD
Compare
    pr_binary(15.55);
    1111.100011
The number of decimal places shown is controlled by pop_pr_places,
which defaults to 6.
    10 -> pop_pr_radix;
    sqrt(2) =>
    ** 1.41421
    2 -> pop_pr_places;
    sqrt(2) =>
    ** 1.41
    6 -> pop_pr_places;
    sqrt(2) =>
    ** 1.41421
A value of 0 causes decimal numbers to be printed as integers.
If pop_pr_exponent is made true (it defaults to false) then exponent form is used for printing decimals and ddecimals:
    true -> pop_pr_exponent;
    sqrt(20000) =>
    ** 1.41421e+2
    false -> pop_pr_exponent;
    sqrt(20000) =>
    ** 141.421
As explained above, the exponent notation can also be used for reading
in decimals:
    1.41421e+2 =>
    ** 141.421