Maxima/Numbers

Check
(%i1) load(to_poly); (%o1) home/a/maxima/share/to_poly_solve/to_poly.lisp (%i2) r; (%o2) r (%i3) isreal_p(r); (%o3) true    /*  When I use unspecified variables, Maxima seems to assume that they are real */ (%i4) z:x+y*%i; (%o4) %i y + x (%i5) isreal_p(z); (%o5) isreal_p(%i y) /* maxima can't check if it is real or not */ (%i6) isreal_p(x); (%o6) true (%i7) isreal_p(y); (%o7) true (%i8) complex_number_p(z); (%o8) false (%i9) declare(z, complex); (%o9) done (%i10) complex_number_p(z); (%o10)  false /* still not complex */                                                                                                              true

Random numbers
bfloat(random(10^fpprec) / 10^fpprec); /* random bfloat with fpprec decimal digits in the range 0 to 1 */

Binary numbers
(%i1) ibase; (%o1) 10 (%i2) obase; (%o2) 10 (%i3) ibase:2; (%o3) 2 (%i4) x=1001110; (%o4) x=78

Argument
Principial value of argument of complex number in turns carg produces results in the range (-pi, pi] . It can be mapped to [0, 2*pi) by adding 2*pi to the negative values

carg_t(z):= block( [t],  t:carg(z)/(2*%pi),  /* now in turns */  if t<0 then t:t+1, /* map from (-1/2,1/2] to [0, 1) */  return(t) )$ On can order list of complex points according to it's argument : l2_ordered: sort(l2, lambda([z1,z2], is(carg(z1) < carg(z2))))$

rational numbers

 * rat
 * ratp

Rationalize with limit denominator:

limit_denominator(x, max_denominator):= block([p0, q0, p1, q1, n, d, a, q2, k, bound1, bound2, ratprint: false], [p0, q0, p1, q1]: [0, 1, 1, 0],  [n, d]: ratexpand([ratnum(x), ratdenom(x)], 0),  if d <= max_denominator then x else  (catch(    do block( a: quotient(n, d), q2: q0+a*q1, if q2 > max_denominator then throw('done), [p0, q0, p1, q1]: [p1, q1, p0+a*p1, q2], [n, d]: [d, n-a*d])), k: quotient(max_denominator-q0, q1), bound1: (p0+k*p1)/(q0+k*q1), bound2: p1/q1, if abs(bound2 - x) <= abs(bound1 - x) then bound2 else bound1))$

Predicate functions
(%i1) is(0=0.0); (%o1) false

Compare : (%i1) a:0.0$ (%i2)is(equal(a,0)); (%o2) true

List of predicate functions ( see p at the end ) :
 * abasep
 * alphacharp
 * alphanumericp
 * atom
 * bfloatp
 * blockmatrixp
 * cequal
 * cequalignore
 * cgreaterp
 * cgreaterpignore
 * charp
 * clessp
 * clesspignore
 * complex_number_p from to_poly package
 * constantp
 * constituent
 * diagmatrixp
 * digitcharp
 * disjointp
 * elementp
 * emptyp
 * evenp
 * featurep
 * floatnump ( compare : isreal_p)
 * if
 * integerp
 * intervalp
 * is
 * isreal_p from to_poly package
 * lcharp
 * listp
 * listp
 * lowercasep
 * mapatom
 * matrixp
 * matrixp
 * maybe
 * member
 * nonnegintegerp
 * nonscalarp
 * numberp
 * oddp
 * operatorp
 * ordergreatp
 * orderlessp
 * picture_equalp
 * picturep
 * poly_depends_p
 * poly_grobner_subsetp
 * polynomialp
 * prederror
 * primep
 * ratnump
 * ratp
 * scalarp
 * sequal
 * sequalignore
 * setequalp
 * setp
 * stringp
 * subsetp
 * subvarp
 * symbolp
 * symmetricp
 * taylorp
 * unknown
 * uppercasep
 * zeroequiv
 * zeromatrixp
 * zn_primroot_p

See also :
 * declare
 * property:
 * rational, irrational, real, imaginary, complex,
 * even, odd,
 * decreasing, increasing
 * evenfun, oddfun

Number Theory
There are functions and operators useful with integer numbers

Elementary number theory
In Maxima there are some elementary functions like the factorial n! and the double factorial n!! defined as $$\frac{n!}{k!}$$ where $$k$$ is the greatest integer less than or equal to $$n/2$$

Divisibility
Some of the most important functions for integer numbers have to do with divisibility:

gcd, ifactor, mod, divisors...

all of them well documented in help. you can view it with the '?' command.

Function ifactors takes positive integer and returns a list of pairs : prime factor and its exponent. For example :

a:ifactors(8); 2,3

It means that : $$8 = 2^3\,$$

Other Functions
Continuus fractions :

(%i6) cfdisrep([1,1,1,1]); (%o6) 1+1/(1+1/(1+1/1)) (%i7) float(%), numer; (%o7) 1.666666666666667