Refactor SmallNumber class
The lumiere.math.SmallNumber
class is an important building block of the code. This custom data type avoids numerical underflow that would otherwise occur when using double-precision floating-point numbers. But as such, the class is also a performance hinderance, as it is not a native, primitive type. The implementation is far from streamlined, and its documentation misleading. This can be corrected, but should not be attempted before we have good test coverage of the code base. Ultimately, it can also be questioned if this class is necessary at all, or if there is a way to rewrite the equations that would avoid the numerical errors, and thus speed up the calculations considerably.