Skip to content

Releases: c3d/db48x

Release 0.8.2 "Honor Seats" - Equation Library Examples, Assignments

21 Oct 05:44
@c3d c3d
Compare
Choose a tag to compare

This release is focusing on the testing, validation and usability of the equation library contributed by Jean Wilson. To that effect, it introduces a new kind of objects, assignments, that only exist on the DB48x and have no direct equivalent on original HP calculators. It also completes the support for library equations in the Root command.

Here is an example that illustrates these capabilities, testing the Ohm’s Law & Power equation in the library:

V=240_V  I=32_A
@ Expecting [ R=7.5 Ω P=7 680. W ]
'ROOT(ⒺOhm’s Law & Power;[R;P];[1_Ω;1_W])'

If you are reading this release note directly on the calculator, you can simply click ENTER while the text above shows up, and it will be copied in your editor. You can change the values of the input variables to explore various possibilities.

In this example, V=24_V is an assignment object that assigns the value 24_V to the global variable named V. It is almost equivalent to 24_V 'V' STO V, except that the value placed on the stack is the assignment object itself. In other words, evaluating V=24_V places V=24_V on the stack. This makes it easy to edit or evaluate assignments on the stack using the interactive stack. In particular, you can select an assignment on the stack wiht the interactive stack and use the Eval (F3) function to restore the variable to the value in the assignment.

The ROOT command in the example illustrates how you can directly use equations in the equation library as argument to Root, and use the multiple-equation solver to solve for more than one variable at a time.

All the examples in the on-line help are now also tested automatically, in order to ensure that all the given examples give the expected results.

Features

  • Implement CustomMenu, whicih is toggled by successive presses on the VAR key. An example is shown in the Demo.48s file. The
    content of the CST or CustomMenu variable is used to define this menu.
  • The documentation now contains numerous executable examples. These examples are identified by a Markdown code block with the rpl syntax colorization indicator. They can be executed directly from the on-line help on the calculator by hitting ENTER while the code block is shown on the screen.
  • The test suite automatically tests all the documentation examples.
  • New equation sets: Light Propagation and Ultrarelativistic Cases
  • Four new equations in Energy & Momentum equation set
  • Assignment objects in the form Name=Value, e.g. A=3.
  • The solver now emits assignment objects for the solution
  • command to store while keeping value on stack. As an extension relative to the HP50G, this command also works inside RPL algebraic
    expressions. For example 3▶A stores 3 in A and returns the value in A. The command is called Copy (the HP50G ARM calls it
    ▶ (Store))
  • The Root command now accepts library equations as input.
  • Arrays and lists are now accepted in algebraic expressions, using ; as a separator between values. For example, '[1;2;3]+[4;5;6]'
    adds two vectors using an algebraic notation. Vectors can contain algebraic expressions. For example '[x+1;y+2;z=3]' is a valid
    vector expression.
  • The solver now accepts algebraic input, including for the multiple equation solver using vectors as input.
  • Ad RombergPlot example to Library and Demo file. This example shows how the Integrate command evaluates the underlying function.
  • menus: Add XRng and YRng to the PlotMenu

Bug fixes

  • Fix a sign bug in the Simple Slope equation
  • Fix "Too many open files" error while saving constants
  • Avoid infinite loop for unterminated case statement
  • What follows a unit in an algebraic expression is no longer ignored.'330_m-20_m' was incorrectly interpreted as '330_m', now
    correctly computes '310_m'.
  • Fix and document the Integrate imprecision and iteration settings.
  • text: Respect display settings in →Str. For example, 3 FIX 0.1 →Str now returns "0.100" and not "0.1", like on HP calculators
  • Repair parsing of HP-style complex numbers, e.g. (12;3)
  • Refactoring of object insertion in text editor to fix various bugs, including the Echo command in the interactive stack inserting the
    object at the end of the text editor instead of at the cursor position.
  • Do not issue Invalid digit for base on the console parsing 1E-10
  • Fix null-dereference issue in to_decimal_if_big, which could be triggered if interrupting an Integrate command using the EXIT key.
  • Avoid occasional garbage at right of menu area
  • simulator: Ensure Copy correctly quotes equations
  • Move image for E Field Finite Line to right section

Improvements

  • Add references to keyboard overlays in the documentation
  • Add documentation for the Root command
  • Improve the way we generate the image files in the Makefile
  • Improve solver behaviour when a solution is not found. Notably, the solver is more likely to converge towards an extremum, and is more likely to find complex roots.

Full Changelog: v0.8.1...v0.8.2

Release 0.8.1 "Sale" - Multi-equation solver

15 Oct 06:57
@c3d c3d
Compare
Choose a tag to compare

Features

  • Multiple-equation solver (HP's MES), solves for variables one at a time
  • The | operator (aka where) applies to library equations
  • The | operator respects variables with units in expressions
  • simulator: Add support for copy and paste (to/from simulator)
  • Add support for cylindrical and spherical 2D and 3D vectors
  • Positional graphic combination operations (e.g. GraphicRatio)
  • Switch to Greek or Cyrillic keyboard maps based on character menu
  • Add EDIT menu commands to transient alpha (e.g. ▶F3 is Word→)
  • Index the help file for performance (about 5x faster on DM42)
  • Accept verbatim code and RPL code snippets in the help file
  • Parse and show help topics taking all aliases into account
  • Convert lists and equations to RPL programs with →Program

Bug fixes

  • Show tagged values for vectors and matrices
  • Update the target global variable after running root
  • Show all variables in the SolvingMenu (with a settings to control it)
  • Unit-related commands accept tagged objects and expression-enclosed units
  • Add angular units (e.g. radians) in angular equations
  • Correct unit for V in Cantilever Shear (was n instead of N)
  • Purge now correctly restores UI patterns settings
  • Add missing font parameter to →Grob (HP calculator compatibility)
  • Include equations and xlibs to list of symbolic objects
  • Fix precision loss for atan, acos and asin for some values
  • Add angles for atan2 when using hardware-accelerated floating-point
  • Remove spaces and separators in the names of library equations
  • keyboard: Replace ASN with ->NUM
  • Preserve trailing decimal separator in FIX mode with NoTrailingDecimal
  • Fix backspace and delete operation around number separators
  • Fix the definition of cosh for complex values (was computing sinh)
  • Accept uppercase and lowercase .48s when saving/restoring state
  • Accept both Ω or Ω as spellings for Ohm (different Unicode)
  • Only update the state file when disk operations are successful

Improvements

  • Add arcsin, arccos and arctan spellings
  • solver: Reorganize solver code
  • documentation: Udpate equation documentation with examples
  • Save UI patterns as hexadecimal numbers (also in Modes command)
  • Use only tabs in library.csv
  • Keep cursor at end of buffer when moving through history with word right
  • Clear selection when BSP is used with a non-empty selection
  • Ensure debug_printf always refreshes the screen
  • Switch to binary search for command parsing (~100x faster)
  • Rename some statistical functions for consistency
  • Fix the list of authors in the online help
  • doc: Update performance data

Full Changelog: v0.8.0...v0.8.1

Release 0.8.0 "Gabriel" - Symbolic operations, equations and library

29 Sep 20:58
@c3d c3d
Compare
Choose a tag to compare

This release adds symbolic integration, differentiation and equation solving, delivers an extensive equation library, and improves the library feature to enable large library objects to be defined in separate files and optimize execution speed for library items. It also improves the rendering of complex equations and fixes a number of crashes or user-interface problems.

Features

  • Symbolic integration, Primitive command, '∫X(sin(X))' syntax
    '∫X(sin(2*X+3)-X)' evaluates as '-cos(2*X+3)/2-x²/2'
  • Symbolic differentiation, Derivative command, ∂X(sin(X)) syntax
    '∂X(sin(2*X+3)-X)' evaluates as '2·cos(2*X+3)-1'
  • Symbolic equation resolution, ISOL (Isolate) command
    'sin(2*X+3)=A' 'X' ISOL gives 'X=(sin⁻¹ A+2*i1*π-3)/2'
  • Apply arithmetic and functions on both sides of equations like A=B
    'A=B' sin 1 + results in 'sin A+1=sin B+1'
  • Add possibility to define library objects in separate files
    The various demos from previous releases are now also in the library
  • commands: Add →Prog command to convert expressions to RPL programs
    'sin(2*X-Y)' →Prog gives « 2 X × Y - sin »
  • Accelerate evaluation of library entries
    Invoking a library object is as fast as if it was on the stack.
    Notice that this is faster than global objects that require lookup.
  • Add Obj→ support for user-defined function calls
    'F(A;B;C)' Obj→ DROP Obj→ gives [F A B C].
    The first call to Obj→ expands the expression, leaving an isolated
    function call on the stack, which the second Obj→ expands.
  • Automatically convert polynomial objects to expressions when needed
  • Many improvements to the equation library contributed by Jean Wilson
  • Document the equation library variables in the help file
  • Add classical/relativistic Kinetic Energy comparison demo
    This was suggested by Jean Wilson as an illustration
  • parser: Parse and convert HP syntax for |
    Typing 'A(X;Y)|(X=1;Y=2)' converts to 'A(X;Y)|X=1|Y=2'

Bug fixes

  • Improve graphical rendering of some complex expressions
  • Render sqrt as and not squareroot in HP compatibility mode
  • Do not draw parentheses around |x| when rendering abs
  • Redefine rpm as turn/min (unit consistency of rotational speed)
  • Avoid crash in for loop if termination condition fails to evaluate
  • Fix rendering and saving of directories
  • Do not leave incorrect stack content when running Obj→ on text
  • Make size consistent in vectors containing tagged objects
  • Accept tagged objects as input in algebraic functions
  • Avoid parsing error for 1,234 when . is the decimal separator
  • Debug output related to expressions is no longer labelled "equations"
  • Fix unit error in Drift Speed & Current Density
  • Cut the size of the build version ID to avoid DMCP buffer overflows
  • Avoid possible corruption when an error occurs in a program
  • Improve error messages for file errors, e.g. when loading a state
  • Move cursor at correct position after numbers when entering units
  • Reject multiple consecutive units, e.g. 1_m_s
  • Fix issue where we insert = incorrectly on the command line
  • Address simulator warning about potential buffer overflow

Improvements

  • tests: Add tests for the newly added library entries
  • primitive: Add test suite for symbolic integration
  • tests: Add test suite for symbolic differentiation
  • Factor out code to expand objects on the stack
  • make install now Installs from distribution files
  • demo: Reorganize demo files as directories
  • tests: Add test for Obj→ on various object types
  • tests: Factor out code checking state of the complete stack
  • tests: Avoid emitting something that looks like compilation errors
  • Update demo file
  • Improve definition of atomic mass unit, add Da (Dalton) alias
  • expressions: Optimize the way to split an equation
  • tests: Adjust tests after changes in SymbolicMenu

Full Changelog: v0.7.18...v0.8.0

Release 0.7.18 "Who" - Subst, Where, Apply

15 Sep 23:17
@c3d c3d
Compare
Choose a tag to compare

This release implements the Apply, Subst and | (Where) commands.

Features

  • ui: Allow Shift-SPC to enter = in an expression
  • Implement subst and where
  • Implement the Apply command
  • Implement the EQNLIB command
  • Add CONSTANTS as a way to select mathematical constants menu
  • Add CONLIB as an alias for ConstantsMenu.

Bug fixes

  • solver: Adjust detection of "epsilon" for large values
  • ttf2font: Flip x coordinates for dense fonts

Improvements

  • doc: List commands that will never be implemented

Release 0.7.17 "Open" - DoSubs, DoList, entering units

12 Sep 19:36
@c3d c3d
Compare
Choose a tag to compare

This release adds DoSubs, DoList, NSub and EndSub commands, and fixes related issues that were found with the associated examples in the HP50G Advanced Reference Manual.

Features

  • lists: Implement DoList, DoSubs, NSub and EndSub
  • units: Add usual "big" units to Computing units menu (e.g. KB, MB)
  • graphics: Add Freeze command
  • ui: Make it easier to enter units
  • expressions: Accept algebraic forms for integrate and root
  • expressions: Graphical rendering of integrals

Bug fixes

  • case: Preserve the code for the default case (which was lost before)
  • parser: Parse arg-less alegbraic commmands such as NSub
  • equations: Fix syntax errors in built-in equations, e.g. missing parentheses
  • equations: Replace variables that match DB48X command names, e.g. Re
  • equations: Replace imperial units with SI units, e.g. in with cm
  • units: Reject user-defined functions in unit expressions
  • constants: Fix definition for the qε0 constant

Improvements

  • Update help about equations with some additional material
  • tests: Run through all the builtin equations
  • ui: Do not insert an extra space before parentheses in equation
  • simulator: Add macOS icons for DB48X and DB50X
  • font: Record saved font with v update

Full Changelog: v0.7.16...v0.7.17

Release 0.7.16 "Clean" - New commands

02 Sep 01:31
@c3d c3d
Compare
Choose a tag to compare
Pre-release

The focus of this release is on new commands, notably for matrix and vector operations. This release also ships with a DM48X-specific keymap, which fixes a problem with teh file selector on the DM32. The equation library has been extended with numerous equations, but they are not fully validated yet.

Features

  • con, idn and ranm matrix generation commands
  • Array→ and →Array commands to convert array to/from stack
  • dot product and cross product commands for vectors
  • DispXY styled text rendering command
  • DupDup command duplicating top item twice
  • Add a large number of equations to equation library

Bug fixes

  • Fix decimal::to_bignum for small magnitudes
  • Return angle unit for atan2 and arg commands
  • The for loop on lists no longer ends leaving the debugger active
  • Interactive stack DropN command returns to level 1
  • Fix file selector's "New file" on DM32 so that ENTER terminates it
  • A few fixes in equations in the equation library

Improvements

  • Improve graphical rendering of expressions such as multiplication operators
  • doc: Update status
  • font: Fix v glyph vertical placement, add dot and cross glyphs
  • ttf2font: Add additional verbose info about source data
  • Add CONSTANTS as an alias for ConstantsMenu
  • Replace documentation references to EEX with ×10ⁿ
  • Optimize parsing of real numbers in parentheses

Full Changelog: v0.7.15...v0.7.16

Release 0.7.15 "Teaching" - Bug fixes notably on iOS

25 Aug 20:43
@c3d c3d
Compare
Choose a tag to compare

This release mostly focuses on issues exposed by the iOS releases.

Bug fixes

  • ios: Fix a screen refresh bug delaying the display of computation results
  • ios: Increase user-accesssible memory for DB50X to match the DM32
  • files: Avoid opening two files when a loaded file contains units/constants
  • units: Restrict unit expressions further, e.g. forbid 1_km^s
  • build: Do not add unwanted macOS-specific files in release tar files
  • build: Remove irrelevant help file from releae tar file
  • constants: Fix numerical value for G constant
  • tests: Rename M demo helper to D, since we use M in symbolic tests
  • makefile: Add mv echo to targets doing image comparison
  • units: Use pi constant in definition of radians unit
  • parser: Detect syntax error on (inv(x)) in non-expression mode
  • units: Avoid infinite loop for bad unit exponents
  • files: Avoid crash in file_closer if file does not exist
  • tests: Add DMS/HMS operations to math demo
  • tests: Add keyboard shortcuts to launch the demos

Full Changelog: v0.7.14...v0.7.15

v0.7.14: Release 0.7.14 "Kids" - Equation-related bug fixes

18 Aug 10:24
@c3d c3d
Compare
Choose a tag to compare

This release fixes a number of issues that were discovered primarily through the Columns and Beams equations.

Features

  • trigonometrics: Add conversion from non-standard angles, so that cos(1_turn) gives the correct result.
  • debug: Debug on error with DebugOnError and KillOnError settings. This makes it easier to debug an RPL program, by making it possible to single-step around the instruction that generated the error.
  • tests: Add three 30 second demo of DB48X features. These are to generate marketing videos for the iPhone version on the Apple store (to be done).

Bug fixes

  • ui: Keep a GC pointer in draw_object to avoid a memory crash
  • equations: Add missing units in some equations, e.g. I and A in second equation of Coilumns and Beams
  • equations: Add explicit radian unit in Eccentric Columns cos, which ensures we get the correct result from the HP50G manual even
    when in Degrees mode.
  • units: Correctly factor out non-integral powers, so that we can compute 1/sqrt(epsilon_0*mu_0) and get the correct result.
  • catalog: Display commands that begin with selection first, so thatFORE shows Foreground before AlphaForeground.
  • stats: When computing a sum, evaluate the expression on all terms. The result for Variance with single variables was wrong because the first term was computed incorrectly due to a misguided optimization.
  • graphics: Error out in RGBPattern for negative input. The negative values were generating an error, but it was not reported, so the next
    command was likely to report it.
  • help: Render shift keys correctly in the color version. The bitmap was interpreted as containing color data. Colorize it instead.

Improvements

  • ui: Select orange as background color during search. The previous setting of showing seardch using white foreground on a white
    background was probably pushing the notion of "blind search" a bit too far.

Full Changelog: v0.7.13...v0.7.14

Release 0.7.13 "Murderers" - Solver improvements

05 Aug 07:20
@c3d c3d
Compare
Choose a tag to compare

Release 0.7.13 "Murderers" - Solver improvements

This releases focuses on improvements to the solver, with the completion of the Columns and Beams section from the HP50G equation library.

Features

  • equations: Add remaining equations from "Columns and Beams"
  • loops: For loops on lists and arrays
  • menus: Add R→D, D→R, →Polar and →Rectangular
  • menus: Automatically select tools menu for library equations
  • units: Allow ubase to work on expressions
  • units: Graphic rendering of units

Bug fixes

  • 48calc.org: Fix mouse click position
  • #ABC #DEF - now correctly produces a based number with >64-bit wordsize
  • conditionals: Parse and evaluate IFTE correctly
  • equations: Fix Elastic Buckling
  • files: Avoid crash in file_closer if file was not open
  • istack: Enable Swap feature on top two levels
  • menu: Update SolvingMenu when updating VariablesMenu
  • parser: Deal with negation more "normally", parse -a² correctly
  • solver: Compute units correctly for inputs
  • solver: Do not change unit when storing in a solver variable
  • solver: Emit correct error message in EvalEq if missing variables
  • solver: Preserve errors reported by underlying function
  • units: Do not evaluate/render units with names
  • units: No longer read variables m and s while processing 1_m/s
  • units: Simplify units that convert to real numbers

Improvements

  • Update .gitignore
  • build: Add BMP files to the distribution
  • complex: Optimize exit conditions for parentheses
  • solver: Add test for equation library
  • solver: Add tests for solving with units
  • solver: Improve behaviour of EvalEq
  • solver: Keep units and constants as-is in equation
  • solver: Make precision relative to equation sides magnitude
  • stack: Show vectors vertically by default
  • ui: Do not persistently hide stack with current equation
  • units: Keep power integral, i.e. avoid getting 1_m^2.0/s
  • units: Strip tags from unit conversion functions
  • units: The EvalEq command should not evaluate dates
  • wasm: Add logos to the repository

Full Changelog: v0.7.12...v0.7.13

Release 0.7.12 "Multiply" - Multiple equations

29 Jul 01:03
@c3d c3d
Compare
Choose a tag to compare

This release focuses on the equation solver, notably in interaction with the equation library. The goal is to get one step closer to the equation library in the HP50G, including the ability to have graphical illustration and multiple equations.

WARNING: The pictures that are integrated in the help are not correctly packaged in this release

YouTube demo: https://youtu.be/5iSjn6pGhqA

Features

  • doc: Add documentation for the equation library
  • doc: Add images from HP50G equation library (to be used later)
  • doc: Some help for the elastic buckling equations.
  • equations: Accept lists of equations in library
  • help: Add documentation for the various constants
  • help: Do not exit help when opening URLs or missing topics
  • lists: Add a setting to evaluate list as programs
  • menu: Add menu entries for solver imprecision and iterations
  • solver: Add support for multiple equation solving
  • ui: Add settings to hide/show empty menus and clear menu on EXIT
  • units: Add flow units (per user request) in Fluid section of units

Bug fixes

  • blitter: Adjust the right margin
  • blitter: Base horizontal adjust on scanline, not width
  • characters: Display correct content for built-in menus
  • constants: Close current file while parsing values
  • constants: Update some outdated values
  • doc: Show help for equations and constants
  • help: Do not try to load PNG images
  • rewrites: Avoid contradictory rules when reordering constants
  • solver: Work correctly with units (when in variables but not equation)

Improvements

  • build: Shorten the size of the version abbrev
  • config: Use config files only for user configuration
  • doc: Record performance data about unit conversion
  • help: Avoid slowing down when scrolling through pages of help
  • help: Record position for history even without a \n
  • simulator: Add tweak to show RPL object details
  • tests: Increase wait time for tests with blinking cursor
  • units: Do not simplify while in unit mode

Full Changelog: v0.7.11...v0.7.12