Releases: c3d/db48x
Release list
Release 0.9.10 "Best" - Ranges and documentation
This release is primarily a refinement of ranges and a documentation update.
New features
- Always display infinity ranges with range notation
- Add constant for
-∞ - Add support for ranges in
Explode/Obj→ - Add support for delta and percent ranges in
ToDecimal - Allow
Copyto target a local variable or setting - Support
TrueandFalsein→Num
Bug fixes
- Replace
logwithln, makelogbe base-10 logarithm - Check zero-divide in ranges
- Fix the implementation of trig functions for ranges
- Fix incorrect command associated to the
%Talias (should be%Total) - Adjust help for
log10andln - Avoid pushing a null pointer on the stack on error evaluating constants
- Add missing
Ⓒsign in uncertainty forEpl - Fix constant evaluation referencing
thisafter it may have moved - Report missing current directory in
Purge - Report errors when purging invalid objects in
PurgeandPurgeAll - Avoid
ClearThingsMenuin tests, the key maps to forward delete in editor
Improvements
- keyboard: Update layout to include
σcharacter - Remove the
state/Test.48Sfile, it's not longer relevant - Add
constantcase toobject::is_negative - Add
DATE-as an alias forDDAYS - Add
PgAllas an alias forPurgeAll - More systematic purging of environment and variables between tests
- Add check in test suite that we actually purged special variables
- Refresh authors list
- Move documentation for
PPARtoplot.md - Avoid date conversions during constant evaluation
- Accelerate and improve the display of constant values in menus
- Add
launch.jsonandtasks.jsonbuild configuration generated by Cursor - Send a
START_TESTcommand at start of test, refresh simulated battery - Cursor-assisted review of missing command documentation
- Cursor-assisted generation of content in the Quickstart guide
- Cursor-assisted improvements to grammar and spelling
- Documentation and examples for
Blankvariants - Documentation and examples for
GrayandRGB - Documentation and examples for
PMIN,PMAX,XRNG,YRNG - Documentation and examples for
Eqand equations - Add examples for list sum, product and difference commands
Release 0.9.9 "Headrest" - Ranges
This release introduces four range types to perform computations on ranges, and fixes serious graphical regressions that remained undetected by the test suite.
New features
- Three range types, known as interval (
1…3), delta range (2±1) and percent range (2±50%), for which arithmetic and most operations have been implemented. - An uncertain type (
2±3σ), for which arithmetic and operations are not implemented yet. - A new flag,
ShowAsDecimal, presents integers and fractions using a decimal format. This is useful for people working in banking, who can use2 FIXmode for all values. In that mode,50will display as50.00, and3/4will display as0.75. TheShowcommand still shows the original value. - The simulator now strips CR/LF when pasting on Windows.
- The
^operator now operates on arrays
Bug fixes
- The image comparison code has been broken since January. As a result, various regression regarding graphical output remained undetected.
- One particular case is the generation of incorrect BMP files after the default format for graphic objects was switched to
bitmap. - A possible crash was eliminated when converting a number to integer, to fraction or to decimal.
Improvements
- The
σ(used for uncertain numbers) replacesρ(unused at the moment) on the keyboard in alpha mode.
Release 0.9.8 "Crowdfeeding" - Bug fixes
This is a minor release with bug fixes.
Bug fixes
- isolate: Fix patterns for exponentials and logs
- doc: Fix list of currently supported models
- derivation: Allow simplification when matching against constant
- solver: Do not emit type error when guesses are constants
- expressions: Correctly substitute names in list substitutions
- menu: Fix label for
ConstantsMenuinMainMenu
Improvements
The INSTALL.md file now describes the installation procedure.
Release 0.9.7 "Home" - Symbolic integration and bug fixes
This release focuses on symbolic integration and bug fixes.
New features
- Symbolic evaluation of integrals when the primitive is known, for example
'∫(A;B;X↑3-sin(X-3);X)'now evaluates symbolically. - hms: Cycle between
hmsanddmsunits - datetime:
_hmsremoves_dmsif necessary - Non-algebraic form of
where, with list as substitution input, for example« 'X-Y·Z' { X 3 Y '2·A' } | »returns'3-2·A·Z'.
Bug fixes
- Correctly render
*and<in the built-in help render engine. - Optimized temporaries cleanup now correctly clears the command if temporary.
- Fix rounding errors for decimal values in HMS and DMS
- Do not give truncated result for
FromHMS - Fix conversion of hardware floating-point values to fraction
- Fix typo in
FromHMShelp entry - Allow screenshots with Shift-Disp in
Show - Fix two tests that fail and should not
- Correct hwfp entry with french locale.
- stack: Correct font size for non-result stack levels
- Swap logfit and powerfit menu entries (wrong label)
Improvements
- Improve detection of unknown primitives and derivatives.
- The rewrite engine was incorrectly rewriting "up" for integration and differentiation, when rewriting "down" is much more efficient. This accelerates symbolic integration and differentiation by more than an order of magnitude in some cases.
- Evaluate the bounds of integrals numerically ahead of time. This accelerates numerical integration when the bounds are complex expressions.
- In the rewrite engine, evaluate the sub-expressions that correspond to a constant in the pattern before comparing. This notably solves some cases where the derivative would contain leftover constants expressions that should have been eliminated, such as
0*X. - Automatically generate the list of implemented commands, and update the implementation status.
- Renamed the settings for numerical / symbolic integration and solver
- Rename
6-Unimplemented.mdto6-ImplementationStatus.mdand remove emptydoc/calc-help/finances.mdfile. - Support for recent compilers (GCC >= 12.2.1).
- Update performance data for 0.9.6
- Add Philippe Martens to the authors list
Release 0.9.6 "Peace" - Bug fixes
This release is mostly bug fixes
Bug fixes
- Evaluate index in
getandputlike the HP50G - Avoid premature simplification during arithmetic operations
- Do not wrap variables after
Copy, e.g. in'A+A▶A+A' - Return errors for unknown primitives / derivatives in algebraics
- Correctly use
GraphicResultDisplayfor result stack level - Ensure pi and e display the same size at 60 digits precision
- Fix bogus exponent truncation in polynomials
- Fix issue in
+and-on vectors with angles, e.g.[ 3 2 1.7_° ] - Fix possible garbage collection memory corruption in
FromVector
Improvements
- units: Make
BaseUnits,→Deg,→Rad,→Gradand→πrarray-wise - Add
VectorMenuon first page ofMatrixMenu - Do not single-step or debug during plot/integration
- Add routine to render u64 and i64
Release 0.9.5.1 "Wait" - Emergency fix for Wait and Refresh
Bug-fix only release for timing of Wait command
Bug fix
The changes that improve battery life in 0.9.5 had an impact on commands that need absolute time, because the internal timer of the DM32/DM42 switches of when in deep sleep. As a result, Wait with durations longer than 1 second would wait much longer than expected, and long-duration Refresh settings e.g. BatteryRefresh would also wait longer than expected. Replace the use of the internal timer with a synthetic timer based on the real-time clock.
Release 0.9.5 "Everlasting" - Power management, offline graphics
This release brings two major new features: vastly reduced power drain, and off-line persistent graphics.
New features
- Off-line graphics are the ability to draw images in memory instead of directly on screen. Like on HP calculators, this works by storing a graphic object in
PICT. Unlike HP calculators,PICTis an actual variable in the current directory, meaning that you can have multiplePICT, although bitmaps use a lot of memory. For example, running500 300 BLANK 'PICT' STOwill create a 500x300 pixels off-line image inPICT, and all graphic commands after that will draw in that off-line image instead of on screen. Off-line graphics are not immediately shown on screen, but are displayed before returning to the command line in a way similar to theShowcommand (i.e. centererd if smaller than the screen, and with scrolling if larger). They are also persistent, meaning that you need to explicitlyClLCDto erase them. - Add
Blank,BlankGrob,BlankBitmapandBlankPixmapcommands to create a blank image with default format, in HP GROB format, in DB48x bitmap (Black and white) format and in DB50x pixmap format (color RPL only). - Add
→HPGrob,→Bitmap,→Pixmapcommands which can be used to generate an HP-compatible GROB format, a bitmap or a pixmap (color RPL only) from an object. If the object is already a graphic, perform conversion. Note that on color RPL, conversions between color and monochrome formats are supported. Colors are converted to monochrome using grayscale patterns. - Add
→LCDandLCD→commands to send an object to the current graphics, or to create a graphic object from the current screen content. - The
Offcommand can now be used in a program and will preserve what is on screen. You can resume execution of the program by using theONkey. AddPowerOffWithImagecommand to show off-images even from programs.
Bug fixes
- Fix display of object
Infoin the interactive stack - Clear system timers before entering system menu, so that the self test menu entry does not run a fast-paced loop.
- Fix off-by-one error in result of
LastBitSet(number bits starting at 0) - Correctly render color pixmaps when on the stack (color RPL only)
Improvements
- Reduce power usage dramatically by disabling timers when going to sleep. This manifests as a higher battery voltage being shown, which is closer to what the DM42 firmware or integrated self-test would show. This will most likely improve battery life for interactive uses of DB48x.
- Reorganize the
MemoryMenuto make both GC and runtime statistics available - Reorganize the
GraphicsMenuby topics to accomodate the new commands - Add image checks in the test infrastructure for RPL code examples
- Add tests for RGB colors
- Repair
make comparewhich was trying to build a binary fromcompare.cc - Make
Suba compatibility spelling forExtract, not the default one - Adjust low battery indications to avoid premature warnings
- Make
debug_printfuse lower-level routines that can run earlier after boot - Add
make INSTALL_PGM_ONLY=y installoption for faster install - Generate DB48x bitmaps by default instead of HP-compatible GROBs. Bitmaps use less memory when the width is not a multiple of 8.
- Make test of pixel functions more reliable by increasing their timeout
- Add help for
ModesMenu,SymbolicResultsandNumericalResults
Release 0.9.4 "Face, meet palms" - Pixmaps, bug fixes
This release fixes embarassing numerical bugs introduced in 0.9.3 and introduces a new pixmap type intended to capture screen pixel maps including in color. Builds for hardware calculators are also smaller due to switching to a nano configuration for the compiler.
New features
- graphics: Add
pixmaptype
Bug fixes
- Adjust unit conversion in
StdRnd - Fix parsing of
ΣY²in equations - Render non-fancy large exponents correctly (e.g.
1E123456789012345) - The precision of numerical constants now adjusts after changing
PREC - Avoid unnecessary purging of constants cache due to internal precision changes
- Return tests values to rounded valus as validated with Wolfram Alpha
- directory: Fix
STOVXandStoreto non-current directories
Improvements
- Fix
sqrtprecision, notably for perfect squares (ouch) - Improve support for recent ARM compilers
- Eliminate new
clangwarnings - Eliminate warnings about function pointers in latest XCode
- Add documentation for
DisplayModesMenu - Precision adjustments are now more consistent across decimal functions
Release 0.9.3 "Transfigured" - Documentation, bug fixes
This release keeps improving the documentation based on the original HP50G Advanced Reference Manual, and fixing issues that are found along the way. It also improves statistics support and adds low-level array manipulation.
New features
- Add
PredX,PredYandΣLinecommands for linear regression predictions.- The
PredXcommand predicts the independent value from the dependent one. - The
PredYcommand predicts the dependent value from the independent one. - The
ΣLinecommand returns the regression formula.
- The
- Add
Mediancommand to compute the median of statistics series - Add low-level array manipulation commands,
COL+,COL-,ROW+,ROW-,CSWPandRSWP, to add, remove and swap rows or columns.
Bug fixes
- Strip trailing zeros from decimals converted from integers, in order to avoid producing incorrectly normalized values. For example,
70000converted to decimal now produces a 5-bytes decimal value and no longer a 6-bytes decimal value. This fixes the result of theSigDigcommand on this input value, as well as fixes cases where comparisions would be incorrect. - Accept quoted names in
==andsame. HP calculators evaluateAandBin'A' 'B' ==but not in'A' 'B' same. - Add symbolic support for logical operations, i.e. correctly create an expression for
'X' 3 andinstead of a type error. - Compute linear regression for each mode when running
BestFit. The previous implementation would erroneously compute the correlation with various modes (linear, log, exp and power), but without optimally recomputing the parameters with that mode. - Consume arguments in
XCol,YColandColΣ - Write slope and intercept in the correct order when updating
ΣPar. The order was wrong, causing various commands to either update them in the wrong order, or to swap them. - Do not emit an error if the stack is empty when running
Σ- - Fix and optimize parsing of
== - Fix a bug in decimal comparisions used by
sqrtandcbrt, fixes the computation of the last digits ofsqrt(163)at 24-digit precision. - Compute
logwith 3 additional digits to avoid getting the last digit wrong in'ln(640320^3+744)/sqrt(163)' - Compute
exp,exp10,logandlog10with additional internal digits to make sure that the last digit is good (verifiied usingcalc). - Fix sign error in buoyancy equation for Champagne bubbles
- Fix
pparparsing and premature validty checking, which caused20 30 XRNGto fail because of a transient state wherexmin<xmaxwas not verified. - expression: Fix rare GC bug in
expression::simplify
Improvements
- Compute all decimal functions with increased precision. The tests now check that the last digit of the functions result for the tested input is correctly rounded.
- Add
typevalue forxlibobjects in HP compatibility mode - Add
TruthLogicForIntegersflag for compatibility with HP calculators when evaluating something like42 and 4. DB48x by default computes this bitwise, which returns0, a logicallyFalsevalue. With the new compatibility flag, the arguments are interpreted as truth values, and the computation producesTruefor improved compatibility with HP calculators. - Add RPL programming examples in the documentation, lifted from the HP50G Advanced Reference Manual, covering conditional statements such as
IF,IFT,IFTE, documentation about tests and conditional structures, type tests, logical commands such asand,or,not. - Add documentation and menu entry for
Headercommand - Add documentation about local variables and the scope of local variables
- Add tests for statistics operations
- Optimize retention of slope and intercept in
BestFit - Micro-optimization on stack operation for comparisons
- Add
MSolvralias forSolverMenufor compatibility with HP calculators - Allow nested precision adjustments in
decimal::precision_adjustclass - Tests now display failures in a way that makes it easier to compare.
- Add documentation for
SeparatorModesMenuentries - runtime: Add check that we push only valid objects
- runtime: Cleanup, remove leftovers from earlier debug
- runtime: Add check for pointer validity
- runtime: Add utility to dump GC pointers
- arithmeric: Add recorder entry to record what operations happen
- Update copyright year to 2025 in
VERSIONcommand
Release 0.9.2 "Temptations" - Multi-variate solver, documentation
This release introduces a true multiple-variables solver, additional matrix operations, and extends the RPL programming documentation.
New features
- The
Rootcommand now selects a true multi-variable solver (Jacobian solver), capable of solving systems of equations with multiple variables, even when variables cannot be isolated one at a time, for example solving{ 'sin(x)=y' 'sin(y)=x+1' }. As a result, the DB48xRootcommand now covers the functionality provided by the HP50G'sROOT,MROOTandMSLV. - Compatibility for
MSLVis preserved thanks to a dedicated command, which like the HP50G leaves input equations and variables on the
stack. - Add
RNRMandCNRM(row and column norms) commands for matrices. - Add
TRNandTRANcommands (matrix transpose, with or without conjugate)
Bug fixes
- Add several missing images used by the test suite to the
gitrepository, e.g. for theTVMmenu. - Fix rare bug parsing lists causing a validation error
- Fix theoretical risk of memory corruption in
det - Solutions found by the solver no longer depend on the existence and value of global variables by the same name prior to solving
- Emit "Interrupted" error when interrupting the solver
- Fix bug comparing decimal zero with small decimal values
Improvements
- Add a section with RPL programming examples, seeded with examples from Chapter 1 of the HP50G Advanced Reference Manual.
- Add documentation about program objects, text, symbols and comments.
- Update documentation for complex numbers, e.g.
ℝ→ℂcommand. - Add documentation for
abs - Add links to "Rules" in constant uncertainty section
- Add a few additional tests in the documentation
- Split instrumentation for the three solver algorithms.
- The solver now uses the display precision to limit the precision of the desired result, like the integrator and like HP calculators.
Video demo: https://www.youtube.com/watch?v=hj-LGN2nhzU