The HP15C is a high-end scientific programmable calculator of the Voyager lineup.
Features
Introduced in 1982 and discontinued in 1989 in favor of the Pioneers, it shares the shirt-pocket sized portrait housing with its Voyager siblings. Due to the limited keys available, this model utilized double shifts, marked as f and g and indicating functions printed in yellow and blue respectively, making most functions two-key combinations, with indirection for less used functions like matrix operations and conditional tests.
The backplate details the battery configuration, loop behavior of ISG and DSE, and the common metric to imperial conversions on the first row. On the second row, register usage breakdown for statistical functions, two-argument functions behaviors, error codes, program conditionals and matrix operations are provided. In the bottom right corner is an FCC legal disclaimer.
A ten digits plus negative indicator LCD without contrast adjustment. 7 mantissas (8 when exponents are positive) can be displayed at once, or 10 digits of decimal, depending on format setting (FIXed point, SCIentific notation, ENGineering notation). Five alphabetical labels (A-E) double as both matrix descriptors and programming labels.
Functionality wise, it is unique in all HP calculators in having a "complex stack". Complex numbers are stored in the cartesian form, with the real part in the X register. When in this mode HP 15C does math in radians mode save for coordinate conversions (which obeys the selected mode). CHS and stack clearing operations do not apply to the complex stack, and values can only be entered by appending the complex part with an I or using the Re<>Im swap function. Notably, SOLVE, integration and matrices only take account of the real stack. Other complex operations that have multiple solutions return one along a defined principal branch. behaviors This behavior is toggled by flag 8 and lights the C annunciator. To exit this mode user has to manually clear flag 8.
The HP-15C features 448 bytes of user-available RAM, allowing at most 64 numeric registers, or 224-448 lines of code each of two or one bytes. As a general rule of thumb, functions that use indirection or have a register as argument takes up two bytes as well as integration. User can DIMension the boundary of the register space, leaving memory to be allocated to program steps or in support of advanced functions as necessary. SOLVE function takes up 5 registers from the unallocated pool, 23 for numerical integration, but only 23 if used together. Toggling flag 8 to put calculator into complex mode takes another 5 and matrices cost 1 per matrix element. Enough memory must be available, or the calculator will raise an error. Ten flags, flag 0 to 9 are available (however no indicators are provided except flag 8 or 9).
The user can address 20 registers directly from R0 to R9 and then R.0 to R.9 (counting as 10-19). Two registers R0 and R1 are always available (DIM 2). The indirect register (i) can be used to address registers (such as STO, RCL, X<>), address matrices (in concert with value stored in R0 and R1, matrix elements), transfer program execution (negative value indicate line numbers), set flags and display formatting. according to the value stored in the I register. 10 tests and matrix operations (detailed on the backplate) can be called using their respective functions plus a numbered argument.
As with period HP calculators, numbers are stored as 7 bytes (56 bits), 10 digits decimal mantissa plus two digits exponent Binary Coded Decimal (BCD). Internally 13 digits are used for higher accuracy, but the result is always rounded to 10 digits when delivered to the X register.[1] In practice this results in a at worst 9th digit correct result for built-in functions, and at worst 5th digit correct result for individual components of complex result.[2] Numerical overflow will toggle flag 9, stop program execution (if any), return +/-9.999999999E99 and start blinking the display. Underflow is silent and return a 0. Flag 9 can be used standalone for blinking the display under program control without execution interruption.
Matrix math is implemented for up to 8x8 and supports common operations like LU decomposition, transpose and inversion. Euclidean (or Frobenius) norm and element wise absolute max can be calculated. Even complex matrices can be solved, expressing a complex matrix as a real matrix up to twice its size.