![]() Note: With this refactoring, `math/utils' no longer depends on `rackunit'. * (flexp2 x) computes (flexpt 2.0 x) but in about 1/3 the time for integer `x' using a lookup table. Written for exact argument reduction in `fllog2' after discovering that (flexpt 2.0 x) was the main performance bottleneck. * (fllog2 x) computes (/ (fllog x) (fllog 2.0)) with near perfect accuracy. Invented an algorithm to compute it with at least 8 extra bits before final rounding; quite pleased with the result. Needed `fllog2' to ensure (fllogb 2.0 x) would be exact when `x' is a power of two. * (fllogb b x) computes (/ (fllog x) (fllog b)) with better accuracy, and also handles limit values in a way that's consistent with the mathematical limits. When those are ambiguous, it's consistent with `flexpt', which follows IEEE 754 and C99. Otherwise returns +nan.0. See docs for details. * `bflogb' is currently just for testing `fllogb'. * Refactored FPU testing and documented it. So far, the only documented way to do it is by calling `test-floating-point', which runs a comprehensive deterministic+randomized suite of tests and returns a list representing failed tests. I'll document individual tests after I document flonum expansions and result/error functions like `fl+/error'. * Added `fllog2' and `fllogb' to the flonum tests. |
||
---|---|---|
.. | ||
array-strictness-tests.rkt | ||
array-tests.rkt | ||
array-untyped-tests.rkt | ||
bigfloat-custodian.rkt | ||
bigfloat-stress-test.rkt | ||
bigfloat-tests.rkt | ||
flonum-tests.rkt | ||
function-tests.rkt | ||
mandelbrot-test.rkt | ||
matrix-strictness-tests.rkt | ||
matrix-tests.rkt | ||
matrix-untyped-tests.rkt | ||
number-theory-tests.rkt | ||
statistics-tests.rkt | ||
strictness-memory-leak-test.rkt | ||
test-utils.rkt |