-------------------- AmigaOS 3.1.4.(1) project -----------------------

Changes made for V45.2 (5.1.2017)

- FFPCmp and FFPTst where needlessly complex in attempting
  to return the correct flags.

- NOTE WELL: The autodocs about FFPCmp confuses register assignment,
  the logic of the function is horrible. The CPU flags reflect
  the comparison of D0 with D1 (as in: cmp.l d1,d0), though
  the value returned by the function reflects the state of
  the comparison of the first argument by the second, which
  is the comparison of D1 with D0, which is exactly the inverse.

- Reassembled with SAS/C "asm". Not that it gives a better
  result, it just detected a couple of problems.

- Added proper library handling code, allowing mathffp be
  flushed from memory, and also converted to a disk-based
  library in case rom space is short.

- Division by zero run into a divison-by-zero exception. While
  this seems acceptable, it is not a good solution for
  floating point implementations which should leave INF or NAN
  in the result instead. Unfortunately, FFP does not have
  means to represent these, thus HUGE_VAL or -HUGE_VAL is returned
  instead.
  
Changes made for 45.3 (6.1.2017)

- Rounding policy changed a bit, rounding at exact mid-point is no 
  longer a round-up.

- Clarified the documentation, and fixed the register assignment of
  SPCmp, which was just the inverse of the documented order. Note that
  the .fd files were correct and do not require fixing.

- Clarified the order of arguments for SPDiv and SPSub which were as
  unclear as they could be.
  

IMPORTANT NOTE TO IMPLEMENTORS:
The quality of the floating point representation of mathffp is
questionable, and this library *should be avoided* in favour of
the IEEE based math libraries. The numerics of this library has
several serious flaws:

- There is no gradual underflow, i.e. there are no
"denormalized numbers". This means that addition and subtraction
are susceptible to cancelation.

- Rounding policy is somewhat questionable. It is neither the
"round to zero" policy the IEEE libraries use, nor full rounding
with round, guard and sticky bit as recommended by IEEE, but a
"round up" without "round to even", thus rounding errors will tend
to pile up.

As a consequence of questionable rounding, "exp(log(x)*y)" and "x^y"
of mathtrans.library will not give identical results, the former
is (when well-defined) typically 1U too large.

Also, as ffp math does not have the possibility to signal INFs and
NANs, error results are signaled by a V bit set - which is not
detectable from C. Instead, the libraries try to provide "reasonable"
return codes. 1/0 returns HUGE_VAL -1/0 -HUGE_VAL. "log" is
symmetrically extended around zero (probably as an attempt to
return the real part of the complex logarithm). Several other ad-hoc
choices have been made for cases like this.

----------------------- AmigaOS 3.2 project --------------------------

Changes made for V46.1 (4.8.2019):

Bumped to V46 to enable automatic loading on Os 3.2.
