|
Agena v. 7.1.4 (10/3/2026, Alexander Walz) |
Readme/What's new |
agena >>
`The Power of Procedural Programming`
7.1.4 Cygnus, March 10, 2026
- `muladd`, the fused multiply-add operator, when given at least one complex number, by default no longer uses 80-bit precision.
Only if you pass the optional last argument `true` will the operator switch to 80 bits. The default mode is up to three times
faster than 80-bit precision.
- `muladd` now also allows to easily `chain` multiple fused multiply-add operations together in just one call:
> muladd(2, 3, 4!0, 5!0, 1!0):
27
This equals:
> 2*3 + 4!0*5!0 + 1!0:
27
and is short for:
> muladd(2, 3, muladd(4!0, 5!0, 1!0)):
27
- Likewise, `fma` supports `chaining`:
> fma(2, 3, 4!0, 5!0, 6!1, 7!2, 1):
67+19*I
which is short for:
> fma(2, 3, fma(4!0, 5!0, fma(6!1, 7!2, 1))):
67+19*I
- `squareadd` no longer uses 80-bit precision when given at least one complex number, boosting execution speed by a factor
of almost three. If you need increased accuracy, you may use the `muladd` operator with the fourth argument `true`.
- `calc.savgolcoeffs`, `dual.arccsc`, `dual.arccsch`, `linalg.crossprod` and `linalg.innerprod` have become sightly more
accurate by avoiding round-off errors.
- The source code has again been cleansed a bit.
7.1.3 Cygnus, March 10, 2026
- The fused multiply-add operator `muladd` now accepts both numbers and complex numbers as input. When given at least one
complex number, it internally computes the result with 80-bit precision which `fma` does not. That is why the operator
is a bit more accurate, but slower than `fma`.
- On Intel platforms when given complex numbers, the result of `squareadd` will now be computed in 80-bit precision, at
the expense of speed (around -40 percent). You might want to call `fma` instead which is much faster with complex numbers.
- In DOS and with complex numbers, `cis`, `cube`, `foreach`, `roll`, `square`, `squareadd` and `sumup` have been
tweaked a tiny bit.
- The accuracy of `calc.savgolcoeffs`, `divs.add` and `divs.subtract` has been improved slightly.
- Multiplication and division of a `linalg` vector and a scalar with the `*` and `/` operators now work correctly and faulty
zero vectors are no longer returned.
- The source code has been cleansed a bit. |
|
Agena v. 4.12.5 (20/5/2025, Alexander Walz) |
Readme/What's new |
4.12.5 Merryville, May 20, 2025
- In the past, the bitshift operators <<< (left shift), >>> (right shift), <<<< (left rotation) and >>>> (right rotation) had different behaviour across platforms when a number at or beyond the +/-2^32 threshold has been processed. This has been changed and the results in these situations are now the same.
Likewise, `bytes.numto32` is now returning the same results on all platforms when casting a value at or beyond the +/-2^32 border.
This also benefits various functions in the `hashes` package as their returns are now the same across platforms, as well.
To check the new underflow or overflow behaviour, use `math.wrap`.
- New function `math.fmod` works and returns the same result as the binary `symmod` operator. It has just been added to facilitate porting C code to Agena.
- The results of `hashes.mix`, `hashes.crc32`, `hashes.crc8`, `hashes.reflect`, `hashes.parity`, `hashes.fibmod`, `hashes.interweave`, `hashes.jinteger` may now be different with out-of-range input, that is with arguments at or beyond the 2^32 threshold, depending on your platform. |
Commenti
Alexander Walz
Sab, 13/05/2017 - 20:06
Collegamento permanente
Hello,
Aggiungi un commento