Agena v. 4.11.0 (6/4/2025, Alexander Walz) |
Readme/What's new |
4.11.0 Houma, April 06, 2025
- Introduced the new pseudo type `nonzeroint` which stands for an integer that is not zero. You can use it as a
required type in parameter lists of procedures and with the following functions and operators: `::`, `:-`,
`checkoptions`, `checktype`, `isall`, `numarray.isall`, `tuples.isall`.
New `isnonzeroint` checks whether all its arguments are non-zero integers and returns `true` or `false`:
> isnonzeroint(-2, -1, 1, 2):
true
> isnonzeroint(-2, -1, 0, 1, 2):
false
New `optnonzeroint` checks whether its argument is a non-zero integer; if its argument is `null`, it returns a
default non-zero integer.
- New `strings.leven` computes the Levenshtein distance or Levenshtein similarity of two strings. It's the same as
`strings.dleven`, but does not take transpositions into account.
> strings.leven('alex', 'paely'):
4
> strings.dleven('alex', 'paely'):
3
- New `strings.lcs` computes the longest common subsequence (LCS) of two strings. Example:
> strings.lcs('Stefan', 'tefa'):
4 tefa
> strings.lcs('Stefan', 'tfea'):
3 tfa
- New `strings.issubseq` checks whether a string represents a subsequence of characters of another string. Examples:
> strings.issubseq('gen', 'agena'), strings.issubseq('gn', 'agena'), strings.issubseq('eg', 'agena'):
true true false
- Introduced the new `numtheory` package for Number Theory. Some functions that were part of the `math` library
have been moved to it, but aliases have been provided for backward compatibility so that you do not need to
change your code for the time being:
old name new name
-----------------------------------------------
math.binet -> numtheory.binet
math.congruentprime -> numtheory.congruentprime
math.fib -> numtheory.fib
math.fibinv -> numtheory.fibinv
math.gcd -> numtheory.gcd
math.invmod -> numtheory.invmod
math.isfib -> numtheory.isfib
math.isprime -> numtheory.isprime
math.kronecker -> numtheory.kronecker
math.lcm -> numtheory.lcm
math.mulmod -> numtheory.mulmod
math.nextprime -> numtheory.nextprime
math.powmod -> numtheory.powmod
math.prevprime -> numtheory.prevprime
math.primes -> numtheory.primes
- New `numtheory.jacobi` computes the Jacobi symbol. The return is either -1, 0 or 1. Example:
> numtheory.jacobi(-286, 4272943):
1
The Jacobi symbol is a generalisation of the Legendre symbol.
- New `numtheory.ifactor` computes the complete integer factorization of any integer. The return is a table of the all primes,
so if you multiply all of them, you will get n.
The function mimics the Maple function of the same name as much as possible. Examples:
> numtheory.ifactor(24):
[2, 2, 2, 3]
> numtheory.ifactor(-17):
[-17]
- Likewise, new `numtheory.ifactors` also returns the complete integer factorization of the integer n as some sort of summary
description: The sign, and the respective factors along with their multiplicity:
> numtheory.ifactors(24): # see above
[1, [[2, 3], [3, 1]]]
> numtheory.ifactors(-17):
[-1, [[17, 1]]]
This is an exact clone of the ifactors function in Maple which is widely used internally there.
- New `numtheory.factors` returns all the integers that divide an integer without remainder. Examples:
> numtheory.ifactor(250), numtheory.ifactors(250):
[2, 5, 5, 5] [1, [[2, 1], [5, 3]]]
> numtheory.factors(-17): # a prime
[17]
- New `numtheory.nthpow` finds the largest n-th power in an integer:
> numtheory.ifactor(250), numtheory.ifactors(250):
[2, 5, 5, 5] [1, [[2, 1], [5, 3]]]
Get factor with exponent 3:
> numtheory.nthpow(250, 3):
125
- New `utils.onedim` transforms multi-dimensional indices to a one-dimensional one. Check the description in the Primer
and Reference for examples.
- The new `maple` package includes aliases to Maple functions that facilitate porting Maple code to Agena. The package is
currently under construction and just includes aliases for Maple functions eval, ifactor, ifactors, isprime, modp, power
and trunc. The collection will grow in the future.
As you see, the `eval` alias that was part of the base library has been moved to the `maple` package. An alias has been
provided to ensure backward compatibility.
- The new C API function `agn_getiinteger` returns an integer from the given position in a table.
- In weird situations, `avl.indices` could run out of stack space, crashing Agena. This has been fixed.
- This release has been named after the City of Houma in the parish seat of Terrebonne Parish, Louisiana and has been
Valgrind-checked on x86 and AMD64 Linux to ensure there are no internal errors or memory leaks. |
Agena v. 3.16.1 (update2, 17/5/2024, Alexander Walz) |
Readme/What's new |
AGENA LIBRARY (CUMULATIVE) UPDATE
Improvements
------------
3.16.1 Library Update 2 Anson, May 17, 2024
- The precision of the factorial function fact left much to be desired with higher order integral arguments n, especially with
n > 101. This has been fixed.
- Removed non-existing territories from data/langreg.csv.
Installation
------------
This update can be used on all operating systems. You may need administrator rights to install this update.
Prerequisite
------------
Please have at least Agena 3.16.1 installed.
Solaris, UNIX, and Mac
----------------------
In Solaris, OpenSolaris, Linux, and Mac, the Agena installation can be found in /usr/agena. (This folder includes
at least the following subdirectories: doc, lib, schemes, and share). Please cd into this Agena main directory,
i.e. into /usr/agena.
Proceed with step `Unpack`.
Windows
-------
In Windows, your Agena installation might usually reside in
- <drive letter>:\Programs\Agena, or
- <drive letter>:\Program Files\Agena, or
- <drive letter>:\Program Files (x86)\Agena.
Please cd into this Agena subdirectory. Its contents is as follows:
13.03.2022 21:22 <DIR> .
13.03.2022 21:22 <DIR> ..
13.03.2022 21:22 <DIR> bin
13.03.2022 21:22 <DIR> doc
13.03.2022 21:22 <DIR> lib
13.03.2022 21:22 <DIR> share
13.03.2022 21:22 61.346 uninstall.exe
Proceed with step `Unpack`.
DOS
---
In DOS, locate the Agena directory that includes the licence and change.log files, and cd into this directory.
Please proceed with step `Unpack`.
Unpack
------
Copy this ZIP archive to your main Agena folder (see above) you just cd'ed into.
Please copy the lib/*.agn files in the lib folder of this ZIP archive to the lib folder of your Agena
installation, overwriting the original files.
If present, copy the updated documentation in the doc directory of this ZIP archive to the doc folder of your
Agena installation, overwriting the original files. If present, please also copy scheme(s) files included in
this update to the schemes folder.
Or just for short: in a shell, just issue the following statement after cd'ing:
unzip -o *update*
Really Updated ?
----------------
To check whether the update has been successfully installed: The start-up message should now include the word
`Update`, e.g.:
AGENA >> a.b.c Update n. (C) 2006-20xy http://agena.sourceforge.net.
That's it.
|
Agena v. 3.16.1 (11/5/2024, Alexander Walz) |
Readme/What's new |
3.16.1 Anson, May 11, 2024
- In the past, when a number was suffixed by the letter 'd', the number was multiplied by 12 (dozen notation). Now the number is assumed
to represent degrees and is automatically converted to radians through multiplication by Pi/180.
> 90d:
1.5707963267949
Likewise, if a number is suffixed by the letter 'r', it is assumed to be in radians and automatically converted to degrees through
multiplication by 180/Pi:
> 1.5707963267949r:
90
The suffix 'D' still represents dozens, so for example:
> 10D:
120
- New `math.todegrees` is the complement to `math.toradians` and converts radians to degrees:
> math.todegrees(Pi/2):
90
- `math.todecimal` did not work well - or unexpectedly - with negative components. This has been fixed by converting all values to positive
while preserving the sign in the result.
> math.todecimal(-1, 30, 45):
-1.5125
> math.todecimal(-1, 30, -45):
-1.5125
- Likewise, `math.toradians` did not work well with negative optional arguments. This has been fixed the same way as for `math.todecimal`.
- `math.dd` was 16 times slower than equivalent `math.todec`, because the former used string parsing and the latter a precise numeric
approach. So from now on, `math.dd` uses the same code as `math.todec`, the latter which has also now been deprecated. An alias
has been provided to ensure backward-compatibility.
- `math.splitdms` has been tuned by eight times, now using arithmetics instead of string processing. |
Commenti
Alexander Walz
Sab, 13/05/2017 - 20:06
Collegamento permanente
Hello,
Aggiungi un commento