This release focuses on support for polynomial, root finding and algebraic expressions, and on making evaluation of algebraic expressions behave closer to algebraic mode on the HP50G, i.e. treat ' like the HP50G treats a backquote expression or an expression entered in algebraic mode.
New features
LUcommand generating LU-decomposition for matricesREF,RREFandRREFPcommands to put matrices in Echelon formOrdercommand to reorder variables in the current directoryPEval,PRootandZeroscommands for polynomials and expressionsUniqueandQuickUniquecommands to keep unique values in a listDEPNDandINDEPcommands to set dependent/independent variables- Implicitly recognize
xlibandconstantsby name, e.g.corDedicace - Flags to control the above,
AutomaticConstantsandAutomaticXLibs - Preserve symbol case for existing variables
- Creating symbols matching builtin names using the
Ⓥprefix, e.g.ⓋHelp - Value comparison for
SortorUniquenow works with expressions - Simplification now factors common ratios, e.g.
A*X+B*X - Primitive and derivative of a polynomial
- Several new constants lifted from the R47 constant catalog
- Hyperbolic secant functions
sech,csch,coth, and their inverse CrDircan now take a list as input to create multiple directories
Bug fixes
- Crash in solver in case of error evaluating some intermediate step
- Correctly put parentheses in
'sin(x+1)'rendered in text mode - Occasional
object_errorinas_text()on simulator - Crash in
IFT/IFTEif given invalid input - Detection of expression vs. RPL programs during evaluation
- Crash in quotient or decimal conversions given erroneous input
- Parsing of
0+ⅈ, was incorrectly parsed as0ⅈ - Negating
0no longer shows-0 - No longer allow incorrect mixing of ranges and uncertain numbers
- Dividing a polynomial by a number now divides constant terms
- Correctly split expressions that contain a single term when testing equations
- Fix simulator race condition while loading the keymap
STOwill no longer overwrite a directory with a non-directory valuePurgewill no longer erase non-empty directories,PGDiris now neededRArconstant uncertainty was incorrectly set to 0- Swap keyboard legacy and 42k keymaps in simulator
Improvements
- Purely imaginary values such as
0+3ⅈnow render as3ⅈ - The
LNAMEcommand now returns a list in algebraic expressions Σ,∏,∂and∫,COMBandPERMnow partially evaluate as on HP50G- Refactor detection of symbolic arguments in functions for scalability
- Refactor detection of algebraic functions for scalability
- Signal when
ui_refresh()takes too long due to internal race condition - Do not drop input in multisolver when a wrong value is given
- Quick exit when parsing empty commands
- Rounding for
→ℚmore accurately respects displayed precision - Internal factoring with square roots and fractions
to_sqrt, used inPRoot - Internal integer and fraction square root, used in simplification
- Reorganize the polynomials menu to bring useful functions at first level
- Accept polynomials and tagged expressions in plotting commands
- Do not default imaginary part to 1 in
complex::make(was error prone) - Optimize the integer power case for range objects
- Zero detection for expressions and polynomials in simplifications
- Makefiles no longer emit confusing
mvoutput inmake compare - New
stack_bufferfacility in the runtime to keep multiple exansions on stack - Add
ISOLtests forsec,csc,cotfunctions - Consolidate project guidance into
AGENTS.md - Simplify simulator beep control logic:
-Nblocks beeps,-nrestores them - Refresh implementation status
- Update documentation for
PGDIR,STOandRCLnew capabilties - Internal facility to swap arbitrary stack levels
- Update man page
- Add recorder_scope-compatible instrumentation for GC and available memory
- Accelerate display of constants/equations/library menus