Skip to content

Releases: c3d/db48x

Release 0.9.10 "Best" - Ranges and documentation

Choose a tag to compare

@c3d c3d released this 21 Jul 01:49

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 Copy to target a local variable or setting
  • Support True and False in →Num

Bug fixes

  • Replace log with ln, make log be base-10 logarithm
  • Check zero-divide in ranges
  • Fix the implementation of trig functions for ranges
  • Fix incorrect command associated to the %T alias (should be %Total)
  • Adjust help for log10 and ln
  • Avoid pushing a null pointer on the stack on error evaluating constants
  • Add missing sign in uncertainty for Epl
  • Fix constant evaluation referencing this after it may have moved
  • Report missing current directory in Purge
  • Report errors when purging invalid objects in Purge and PurgeAll
  • Avoid ClearThingsMenu in tests, the key maps to forward delete in editor

Improvements

  • keyboard: Update layout to include σ character
  • Remove the state/Test.48S file, it's not longer relevant
  • Add constant case to object::is_negative
  • Add DATE- as an alias for DDAYS
  • Add PgAll as an alias for PurgeAll
  • 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 PPAR to plot.md
  • Avoid date conversions during constant evaluation
  • Accelerate and improve the display of constant values in menus
  • Add launch.json and tasks.json build configuration generated by Cursor
  • Send a START_TEST command 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 Blank variants
  • Documentation and examples for Gray and RGB
  • Documentation and examples for PMIN, PMAX, XRNG, YRNG
  • Documentation and examples for Eq and equations
  • Add examples for list sum, product and difference commands

Release 0.9.9 "Headrest" - Ranges

Pre-release

Choose a tag to compare

@c3d c3d released this 30 Jun 20:24

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 use 2 FIX mode for all values. In that mode, 50 will display as 50.00, and 3/4 will display as 0.75. The Show command 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

Choose a tag to compare

@c3d c3d released this 22 Jun 22:27

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 ConstantsMenu in MainMenu

Improvements

The INSTALL.md file now describes the installation procedure.

Release 0.9.7 "Home" - Symbolic integration and bug fixes

Choose a tag to compare

@c3d c3d released this 26 May 05:25

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 hms and dms units
  • datetime: _hms removes _dms if 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 FromHMS help 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.md to 6-ImplementationStatus.md and remove empty doc/calc-help/finances.md file.
  • 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

Pre-release

Choose a tag to compare

@c3d c3d released this 27 Apr 23:00

This release is mostly bug fixes

Bug fixes

  • Evaluate index in get and put like 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 GraphicResultDisplay for 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, →Grad and →πr array-wise
  • Add VectorMenu on first page of MatrixMenu
  • 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

Choose a tag to compare

@c3d c3d released this 22 Apr 08:11

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

Choose a tag to compare

@c3d c3d released this 21 Apr 16:02

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, PICT is an actual variable in the current directory, meaning that you can have multiple PICT, although bitmaps use a lot of memory. For example, running 500 300 BLANK 'PICT' STO will create a 500x300 pixels off-line image in PICT, 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 the Show command (i.e. centererd if smaller than the screen, and with scrolling if larger). They are also persistent, meaning that you need to explicitly ClLCD to erase them.
  • Add Blank, BlankGrob, BlankBitmap and BlankPixmap commands 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, →Pixmap commands 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 →LCD and LCD→ commands to send an object to the current graphics, or to create a graphic object from the current screen content.
  • The Off command can now be used in a program and will preserve what is on screen. You can resume execution of the program by using the ON key. Add PowerOffWithImage command to show off-images even from programs.

Bug fixes

  • Fix display of object Info in 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 MemoryMenu to make both GC and runtime statistics available
  • Reorganize the GraphicsMenu by topics to accomodate the new commands
  • Add image checks in the test infrastructure for RPL code examples
  • Add tests for RGB colors
  • Repair make compare which was trying to build a binary from compare.cc
  • Make Sub a compatibility spelling for Extract, not the default one
  • Adjust low battery indications to avoid premature warnings
  • Make debug_printf use lower-level routines that can run earlier after boot
  • Add make INSTALL_PGM_ONLY=y install option 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, SymbolicResults and NumericalResults

Release 0.9.4 "Face, meet palms" - Pixmaps, bug fixes

Choose a tag to compare

@c3d c3d released this 13 Apr 23:05

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 pixmap type

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 STOVX and Store to non-current directories

Improvements

  • Fix sqrt precision, notably for perfect squares (ouch)
  • Improve support for recent ARM compilers
  • Eliminate new clang warnings
  • 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

Choose a tag to compare

@c3d c3d released this 06 Apr 21:24

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, PredY and ΣLine commands for linear regression predictions.
    • The PredX command predicts the independent value from the dependent one.
    • The PredY command predicts the dependent value from the independent one.
    • The ΣLine command returns the regression formula.
  • Add Median command to compute the median of statistics series
  • Add low-level array manipulation commands, COL+, COL-, ROW+, ROW-, CSWP and RSWP, 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, 70000 converted to decimal now produces a 5-bytes decimal value and no longer a 6-bytes decimal value. This fixes the result of the SigDig command on this input value, as well as fixes cases where comparisions would be incorrect.
  • Accept quoted names in == and same. HP calculators evaluate A and B in 'A' 'B' == but not in 'A' 'B' same.
  • Add symbolic support for logical operations, i.e. correctly create an expression for 'X' 3 and instead 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, YCol and ColΣ
  • 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 sqrt and cbrt, fixes the computation of the last digits of sqrt(163) at 24-digit precision.
  • Compute log with 3 additional digits to avoid getting the last digit wrong in 'ln(640320^3+744)/sqrt(163)'
  • Compute exp, exp10, log and log10 with additional internal digits to make sure that the last digit is good (verifiied using calc).
  • Fix sign error in buoyancy equation for Champagne bubbles
  • Fix ppar parsing and premature validty checking, which caused 20 30 XRNG to fail because of a transient state where xmin<xmax was 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 type value for xlib objects in HP compatibility mode
  • Add TruthLogicForIntegers flag for compatibility with HP calculators when evaluating something like 42 and 4. DB48x by default computes this bitwise, which returns 0, a logically False value. With the new compatibility flag, the arguments are interpreted as truth values, and the computation produces True for improved compatibility with HP calculators.
  • Add RPL programming examples in the documentation, lifted from the HP50G Advanced Reference Manual, covering conditional statements such asIF, IFT, IFTE, documentation about tests and conditional structures, type tests, logical commands such as and, or, not.
  • Add documentation and menu entry for Header command
  • 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 MSolvr alias for SolverMenu for compatibility with HP calculators
  • Allow nested precision adjustments in decimal::precision_adjust class
  • Tests now display failures in a way that makes it easier to compare.
  • Add documentation for SeparatorModesMenu entries
  • 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 VERSION command

Release 0.9.2 "Temptations" - Multi-variate solver, documentation

Choose a tag to compare

@c3d c3d released this 09 Mar 14:18

This release introduces a true multiple-variables solver, additional matrix operations, and extends the RPL programming documentation.

New features

  • The Root command 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 DB48x Root command now covers the functionality provided by the HP50G's ROOT, MROOT and MSLV .
  • Compatibility for MSLV is preserved thanks to a dedicated command, which like the HP50G leaves input equations and variables on the
    stack.
  • Add RNRM and CNRM (row and column norms) commands for matrices.
  • Add TRN and TRAN commands (matrix transpose, with or without conjugate)

Bug fixes

  • Add several missing images used by the test suite to the git repository, e.g. for the TVM menu.
  • 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