## 4. Numbers

An integer is a string of digits optionally preceded by + or -. A real number looks like an integer, except that it has a decimal point and optionally can be written in scientific notation. A rational looks like two integers with a / between them. LISP supports complex numbers, which are written `#c(r i)` (where r is the real part and i is the imaginary part). A number is any of the above. Here are some numbers:

1. 5
2. 17
3. -34
4. +6
5. 3.1415
6. 1.722e-15
7. #c(1.722e-15 0.75)

The standard arithmetic functions are all available: `+`, `-`, `*`, `/`, `floor`, `ceiling`, `mod`, `sin`, `cos`, `tan`, `sqrt`, `exp`, `expt`, and so forth. All of them accept any kind of number as an argument. `+`, `-`, `*`, and `/` return a number according to type contagion: an integer plus a rational is a rational, a rational plus a real is a real, and a real plus a complex is a complex. Here are some examples:

> `

>     > (+ 3 3/4)             ;type contagion
>     15/4
>     > (exp 1)               ;e
>     2.7182817
>     > (exp 3)               ;e*e*e
>     20.085537
>     > (expt 3 4.2)          ;exponent with a base other than e
>     100.90418
>     > (+ 5 6 7 (* 8 9 10))  ;the fns +-*/ all accept multiple arguments

> `

There is no limit to the absolute value of an integer except the memory size of your computer. Be warned that computations with bignums (as large integers are called) can be slow. (So can computations with rationals, especially compared to the corresponding computations with small integers or floats.)