The function is modelled on lorentz::sol() which gets and sets
the speed of light.
Clifford algebras require a bilinear form on \(R^n\)
\(\left<\cdot,\cdot\right>\), usually written
$$\left<{\mathbf x},{\mathbf x}\right>=x_1^2+x_2^2+\cdots
+x_p^2-x_{p+1}^2-\cdots -x_{p+q}^2
$$
where \(p+q=n\). With this quadratic form the vector space is denoted
\(R^{p,q}\), and we say that \(p\) is the signature of the bilinear
form \(\left<\cdot,\cdot\right>\). This gives rise to the
Clifford algebra \(C_{p,q}\).
If the quadratic form is positive-definite, package idiom is to use the
default special value \(p=0\) (which means that zero entries on the
main diagonal are negative).
Specifying a negative value for \(p\) sets the quadratic form
to be identically zero, reducing the geometric product to the exterior
wedge product and thus a Grassman algebra. But use the wedge
package for this, which is much more efficient and uses nicer idiom.
Function is_ok_sig() is a helper function that checks for a
proper signature.
Function mymax() is a helper function that avoids warnings from
max() when given an empty argument.