Releases: c3d/db48x
Release 0.9.20 "Corpus" - Polynomials and algebraic expressions
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
Release 0.9.19 "Spirit" - More constants, more space left
This release includes a larger-than-usual number of changes, mostly to make room for more constants. A side effect is that we gained a lot of
additional space for the DM42, giving us a lot of headroom for future developments. On the other hand, this may cause unexpected bugs. If
you run DB48x on a DM42, please check for anything out of the ordinary and report it.
New features
- Hierarchical constants library, with astronomy data for planets
- fonts: Add astronomy-related glyphs and a few more
- simulator: RPL evaluation with
-e, to preload the calculator - simulator: RPL console evaluation mode with
-E(prints to console) - simulator: RPL evaluation from file with
-fand-F - simulator: headless mode with
-H(no window showing) - simulator: screen capture with
-Cfor scripting - simulator: Persist window geometry across runs
- simulator: Persist calculator state on exit
- ui: Enhanced behaviour for EEX key (skips to exponent)
- variables: Store and recall to path
GCD(GreatestCommonDenominator) andLCM(LeastCommonMultiple)Quotecommand- Hitting EXIT while editing clears menu
Bug fixes
- variables: Memory corruption when replacing object with subobject
- Fix parsing bug causing partial load of .48k keymaps beyond
@ - arrays: Strip tags from array and index in
getandput - solver: Improve solver precision in Std mode
- constants: Correcting the standard uncertainty of several constants.
- constants: Correct the Tau mass relative uncertainty.
- Make sure simulators get the correct help file (distinct
.qrcfiles) - Show empty menu when entering empty directory in 1-line mode
- Accept decimal / fraction conversions for arrays containing names
- Make it possible to reload
Demo.48safter initial run on DM42 - Correctly show error message while loading files
- ui: Do not remove
-when using CHS in an expression like5-3. - bignum: Remove leftover printf statement
- menu: Refresh
CustomMenuif updated while active - simulator: Fix race condition in Paste command
- ci: keep Android AABs under
android/ - ci: package db50x Windows simulator from the correct path
- wasm: bootstrap recorder and host tools correctly
- ci: use libsystre in Windows packaging
- doc: Fix description of simulator -m option
- ids: Fix aliases for
EquationValueandXLibValue - menus: Connect menu entries incorrectly marked as unimplemented
- Fix help topics for various constants / constant groups
Improvements
- fw: Move all C / C++ strings to the QSPI on DM42 (save >80K flash)
- tests: Replace
LSHIFT, IwithID_ConstantsMenufor readability - tests: Run
cstlib/eqlibtests beyond first error - tests: Use
STDinstead of12 SIG - tests: Do not save state file after running the test suite
- Do not waste memory while converting
<<,>>and-> - Improve rebuild in case of QSPI CRC mismatch
- Enable
make TAR_EXTRA_FILES= installto install only binaries - makefile: Generate listing files like the old makefiles
- makefile: Add image comparison targets like in old makefile
- makefile: Avoid extraneous / in paths
- makefile: Pass
DB48X_VERSIONthrough the command-line - debug: Change debug_printf to use all 12 rows
- commands: micro-optimize factorization of
cmp == 0test - chuck: Make the
CHUCKcommand optional for repeatable builds - install: Add
DISK_NAMEvariables to specify volume name - ui: Simplify display of alpha and user indicators
- doc: Add information on how to start Fedora on WSL
- ui: Fix misspelling in comment
- doc: Make the age-verification
LEGAL-NOTICEmore general - chore(ci): bump packages versions
- doc: Add Pasquale Pigazzini as an author
- solver: Fix compiler warning about signed vs unsigned
- library: Fix comment and remove duplicate entry
- commands: Add
Γalias forGamma - menus: Update and reorganize parts menu
- locals: Detect incorrect argument count in algebraic function calls
- locals: Do not evaluate algebraic expression passed as argument
- version: Update copyright year to 2026
- parser: Accept
,as a separator in algebraic function calls - Reorder the constants menu for efficiency
Release 0.9.18 "Chuck" - Sucess begins inside
This release includes a number of under-the-hood improvements that will make the life of maintainers easier in the long run.
New features
- Implement the
Chuckcommand - Make
xqrecognize more patterns during simplification - List the menus in the help file
- Support for tables in the help file
- Extend
re,im,conjandsignto lists and arrays - Add
normas a separate command fromabs ListRecursionDepthsetting formap,reduce,filter
Bug fixes
- Remove
-fsanitizeoption on macOS (hangs on macOS 26.4) - Fix incorrect evaluation of constants during simplification
Improvements
- Switch to the make-it-quick build system
- Shared cross-platorm clipboard code
- Automate the build of releases
- Put the variables naming expression patterns in a namespace
- Improved instructions for AI agents
abson vectors and matrices now computes absolute value- Repair GitHub actions
- Improve solver shuffle around singularities and errors
- Fix path for grep testing in case of example test failure
Signed-off-by: Christophe de Dinechin christophe@dinechin.org
Release 0.9.17 - Rational approximation, indexing, Android fixes
This incremental release delivers new features and fixes a number of bugs.
New features
- Add
→Qπcommand for rational approximation with π, √n, ln(n) and e - Apply
→Qand→Qπto numbers in expressions - Add array/list indexing support in algebraic expressions e.g.
'L(1)' - Add ability to
Store/CopytoL(1) - Add "real"
ConstantNameandConstantValuecommands
Bug fixes
- Fix parentheses around exponents in graph rendering of
'(a+b)^(c+d)' - Fix label for
ToRelativeUncertainty,→RelRndinstead of→RelUnc - Fix command alias mapping for
RNrm - Improve parsing of implicit multiplication for a number of edge cases
- Fix
utf8_nextfor garbage bytes following ASCII characters - Fix unsatisfied symbol errors with gcc/emcc in the WASM build
- Save Android system state when app is suspended or hidden
- Ensure Android help resources are extracted and available at runtime
- Restore image testing functionality in the test framework
- Updated test images that had become obsolete
- Report errors when saving reference files in tests
- Avoid stack corruption / crash when parsing malformed help index
- Fix computation of
DFC(2.3) - Fix null-pointer crash if the multiple equation solver fails
Enhancements
- Constrain
→Qand→Qπbehavior to FIX/SCI/ENG setting (like HPs) - Minor optimization for
program::run - Save about 3.4K of RAM on physical devices
- Speed up test runs while increasing default wait time for stability
- Documentation cleanup and additions, add more RPL examples
- Add clear build-time error message when a help topic exceeds 80 characters
- Add demo for interactive menu use
- Optimize away redundant argument checking
- Documentation for DCF and DCF2F
Signed-off-by: Christophe de Dinechin christophe@dinechin.org
Release 0.9.16 - Factorization, precision fixes, and documentation
This release adds prime and factorization features, improves numeric precision,
and expands simulator and user documentation.
New features
- Add
IsPrime,Factors,PrevPrimeandNextPrimecommands - Add
MaxFactorsBitsandMaxFactorIterationssettings for factorization - Add
TRIGSINcommand for Pythagorean identity rewrites - Add a Unix man page and simulator documentation
- Add simulator recorder dump on
F16; move demo playback toF13-F15 - Paint navigation arrows in
SHOW - Accept
CR/LFline endings when reading Windows files - Display keyboard access paths in help for commands
Bug fixes
- Fix
expm1precision loss for small arguments, including complex values - Fix
ln1pprecision loss for small arguments - Fix shift behavior after transient alpha, and support shift/xshift for transalpha
- Reset
show_xandshow_ywhen exitingSHOW - Ensure the simulator creates the
screensdirectory when needed - Fix an infinity optimization regression in arithmetic
- Add missing null-dereference checks in factorization code
- Treat
^as right-associative like on the HP50G
Enhancements
- Refactor and optimize the decimal factorization code path, with expanded tests
- Add conversion support to
floatanddoublein algebraic code - Update to recorder v1.2.3
- Add documentation updates (DeepWiki reference, legal notice updates)
- Add build preparation for upcoming make-it-quick integration
- Welcome several new authors to the team, see AUTHORS file
- Add LEGAL-NOTICE.md about compliance with California and Colorado laws
- Add menu entries for
hypotandatan2
Signed-off-by: Christophe de Dinechin christophe@dinechin.org
Release 0.9.15 "Myriam" - GitHub automation, portability
This release focused on GitHub and GitLab automation, and provides automated macOS, Linux, Windows and Android builds. You can still download the artefacts the usual way, but there should be new links attached to the release as well with artefacts generated through this new GitHub workflow.
New features
- GitHub automation automatically builds various packages
- Preparation for GitLab automation (still largely untested)
- Windows simulator
- Android package
- WebAssembly application (WASM) now has help and configuration files
- DM42n build (differs from DM32 only in the help files)
- Dockerfile to create a container with the simulator
- Add
ρinRangesMenu - Accept units when creating a range from components
- Add
Range→command that expands ranges with units
Bug fixes
- Corrected typos in some builtin constants
- Spelling and grammar fixes in documentation
- Build failure for wasm due to use of
source, abash-only syntax - WebAssembly application no longer uses 100% CPU
- The simulator can now be launched from any directory
- The macOS simulator correctly launches from the Finder or Dock
- Portability bug fixes in the DMCP emulation
- The Settings menu is now correctly refreshed after
ResetModes - Fix double-shifted arrow keys
- Correctly show help for
Swap,Negate, andCycle - Fix order on stack for
Explodeon a range value - Android build bug fixes
Enhancements
- Add osx program in lauch.json
- The simulator no longer overwrites configuration files by default
- Builds that use
gccnow enable more warnings - Simplify shift-handling logic
Release 0.9.14 "Latran" - Android preparation
This is a very minor release with bug fixes notably for Android
New features
- The screen updates when rendering and
PICTis set
Bug fixes
Waitfor durations longer than 1 second now works in simulator→%Range,→∆RangeandRange→now use displayed values- 0.9.13 regression, leftover input value after error during plotting
Improvements
- Semi-working Android build
Release 0.9.13 "Saints" - Truth plot, colors, and bug fixes
This release focuses on graphics and a few user-reported bug fixes
New features
binscomputes frequency bins from statistics dataRessets the resolution when plottingHistogramPlotdraws a histogram (frequency) plot from an arrayHSVgenerates a color pattern from hue, saturation and valueColorgenerates a color pattern from an object, including namesTruthPlotrenders a truth value plot, with grayscale and color options- Add a new
XYPlotsdemo illustratingTruthPlotvariants
Bug fixes
- Update the screen in
ShowwhenPictis set - Fix crash in
Date+when adding invalid dates - Correctly update the
UserModeMenuand annunciator when changing User mode - The
STOoperation now works sensibly on flags - Fixed a rare on-startup crash running tests in the debugger
- Invalidate the font cache when changing settings (notably
FixedWidthDigits) - Fix transient
Inputvalidation errors after text-editor errors - Remove two extra parentheses in the documentation for settings
Improvements
- Transient Alpha now preserves existing Alpha / Lowercase mode
- Remove dependency on external
crc32utility, now use a local implementation - Remove dependency on
tac, replace it withtail -r - Rendered graphics are now preserved in case of auto-power-off
- Avoid transient build errors on missing help directory
- Add documentation for
ResetModesand usage example forModes - Negative dates now show as
BCinstead of with a minus sign
Release 0.9.12 "Alive" - Return to active duty
This release focuses on simulator improvements, bug fixes, and enhanced mathematical functionality, marking a return to active development and maintenance after the hiatus caused by Christophe de Dinechin's move.
New features
- Enhanced trigonometric functions with exact angle reduction when possible
- Improved simulator graphics by smoothing the output when rescaling
Bug fixes
- Compute Julian day number conversion with negative Gregorian years
- Fixed crash in
lgammafunction on DM32 / DM42n platforms - Fixed undefined symbol issue in WASM builds
- Fixed platform-specific compilation errors on Android
- Fixed incorrect simplification for
sqrtfunction - Fixed display of checksum in the
Infobox - Fixed hang when reading CSV files containing unit objects
- Do not reorder mean and standard deviation parts in uncertain numbers
- Avoid possible null-dereference in several statistical functions
Improvements
- The simulator now preserves a fixed aspect ratio while resizing
- The simulator now builds cleanly on Qt5
- Added 2 new tests for Julian day number conversion
- Updated copyright year in About message
- Improved description of "Julian day number" commands in documentation
- Improved build system to select qmake6 on Arch Linux
- Show
→Numspelling in compatibility mode - Updated AUTHORS list
- Remove documentation for newRPL commands UDEFINE and UPURGE
- Improve implementation status section of the documentation
Release 0.9.11 "Prayer" - Uncertain numbers
This release implements arithmetic and basic functions on uncertain numbers.
This propagates uncertainty using quadradic superposition, in a way similar to OpenRPNCalc, with a generalization for correlated variables.
New features
- Arithmetic and basic functions on uncertain numbers
- Add support for complex-valued unit objects, e.g.
5+3ⅈ Ω - Add support for range-valued unit objects, e.g.
1…3 Ω - Support arithmetic operation on infinities, e.g.
∞ 42 + - Add commands to generate mathematical constants (π, ℮, ∞ and −∞)
- Parsing and editing of ranges containing infinities
- Accept infinities in
→Rangeand variants - Comparison of infinite values and finite values
- Add union and intersection commands for ranges
- Add operations to build ranges and uncertain numbers from components
- Add derivative for
erfanderfc
Bug fixes
- Do not leave bad expressions behind after errors on ranges
- Obey the
InfinityErrorflag when detecting divide-by-zero in ranges - Avoid crash pushing null pointer after unit evaluation error
- Avoid spurious inconsistent units error due to date computations
- Null-protection in variadic
list::make, fixes null-deref crash
Improvements
- Accelerate error exit from arithmetic operations
- Render uncertain numbers as
110±σ15instead of110±15σ - Accept
−as valid input in constants (for−∞) - Record performance data for iPhone 16
- Change spelling to
→σRangeinRangeMenu - Use
ASSERTfor divide by zero inner checks (remove dead code)