I often use a mix of hexadecimal and decimal in my calculations, and needed a calculator that could do this conveniently. I designed this calculator with the following goals:

- Easily switch between decimal and hexadecimal
- Keyboard input for most common operations

This is the documentation page. The calculator is here.

- RPN and infix notation input modes
- Three different button layouts
**Numpad**: Button locations match the numeric keypad and navigation keys on a full-size keyboard. Convenient for keyboard input.**Hexadecimal**: Has buttons for all 16 hexadecimal digits. More convenient for mouse or touchscreen input where exact correspondance with a keyboard layout is not necessary.**Touch**: Experimental layout for touchscreens. Requires less pointing accuracy by encoding each digit as a line segment (4 start points × 4 end points = 16 digits).

- Easily switch/convert between bases, even within the same calculation.
- Three dedicated buttons choose between decimal, hexadecimal, and binary bases.
- Holding Shift (decimal) or Ctrl (hexadecimal) when entering the number chooses the base for that number.
- The base can be changed while entering a number, allowing each number to be entered in a different base.

- Touchscreen/mouse optimization: Dragging up or down on a button selects the Shift or Ctrl variant of the operation without needing to click/tap the Shift or Ctrl button.
- Truncation of a number down to a fixed-sized integer. Useful for emulating two's complement arithmetic on fixed-length binary integers.

- Uses the GNU MPFR library for binary floating-point arithmetic.
- Internal calculations use 512 bits of mantissa.

The top two rows of buttons map to F1 to F12 of the keyboard, with Shift for the top row, and without Shift for the second row.

When a button has a red label above, or blue label below the main label, the red function is accessed by holding Shift, while the blue function is accessed by holding Ctrl.

Unlike most calculators, the decimal point and exponent functions share one key. When entering a number, press

once to enter the fractional part, and press again to enter the exponent. Some examples:**1.23**:**1.23e4**:**1e4**:**0.2**:**0.2e-3**:

The backspace key is used for three similar operations:

**Backspace**: When entering a number, this deletes the last entered digit. When not entering a number, this deletes one number or operation in infix mode, or the bottom-most stack entry in RPN mode.**Clr Stk**: Clear stack. Deletes all four stack entries shown in the display.**CE**: Clear Entry. When entering a number, this deletes all of the digits of the number currently being entered. This is faster than pressing Backspace multiple times, and also won't delete beyond the current number. When not entering a number, does not delete anything, so it won't delete a long expression in infix mode.

**Converting between bases** is done by changing the display mode using the Bin, Dec, and Hex buttons.
Changing the mode changes the base for all numbers in the display.

**Entering numbers**: The base can be changed while entering a number, to allow mixed-base expressions.
When entering a number, pressing Bin/Dec/Hex once changes the base *only* for the number being entered *without*
changing the display mode. Pressing a second time changes the display mode. The base of a number being entered
can also be changed with the Shift and Ctrl keys. Typing digits while holding Shift changes the base to decimal,
while holding Ctrl changes the base to Hexadecimal.

For example, to calculate C00 (hexadecimal) + 128 (decimal), type
`c00+80=c80`

in hexadecimal mode or `3072+128=3200`

in decimal mode. Individual numbers
being entered can be in a different base than the current display mode.
The same calculation in RPN mode would be
+( ) +( ) ,
with a result of `c80`

(hexadecimal), `3200`

(decimal), or `110010000000`

(binary).

Typing a digit that exceeds the maximum allowed by the current mode also automatically changes the base. For example, typing

while in binary mode automatically changes the number to decimal, while typing changes the number to hexadecimal, regardless of whether Shift or Ctrl are held.The current **display mode** is shown by the yellow highlight on the Bin, Dec, and Hex buttons. This indicates the
base that is used to display numbers, and is also the default base used when entering a new number.

When entering a number, the base of the **current number** is shown in the display and on the Bin/Dec/Hex buttons.
The right side of the bottom row of the display shows

, **BIN**

, or **DEC**

, and
one of the Bin/Dec/Hex button labels has an underline. These are only shown when entering a number. If the yellow highlight is on
a different Bin/Dec/Hex button than the underline, it indicates that the number is being entered in a different base
than the base used to display numbers.**HEX**

There are two input notations supported:

**RPN**: Reverse Polish Notation. Many Hewlett-Packard calculators use RPN. Operations are entered after their operands. For example, to compute 1 + 2 × 3, enter .**Infix**: Most other calculators use infix notation. Operations are entered in between their operands. For example, to compute 1 + 2 × 3, enterUnary operations (operations with one operand) are usually input after their operand (e.g.,

), but most can also be entered before the operand (e.g., ) with the interpretation determined by context. This context-dependent interpretation can be confusing, especially when it interacts with operator precedence rules. For example, results in sqrt(1^{2}), but results in (ln(1))^{2}.

The button layout is slightly different between the two modes. RPN mode uses an

key to enter multiple numbers without an operator in between, while infix mode requires , , and keys.
The **Numpad** layout matches the numeric keypad and navigation keys of a typical full-size keyboard.
Hexadecimal numbers can be entered using the numeric keypad while holding down Ctrl. This places the A to F
keys near the numeric keys, to allow entering hexadecimal numbers without jumping all over the keyboard.

The **Hexadecimal** layout is intended for mouse or touchscreen devices where there is no need for buttons
to be arranged to match a keyboard. With more buttons, all sixteen hexadecimal digits are arranged in numerical
order and available without using Ctrl.

The **Touch 4 ^{2}** layout arranges the sixteen hexademical digits into four groups of four. Each digit is entered
by dragging from one of the four start squares to one of four end squares, which provides 16 different combinations.
For example, dragging from the lower-left square to the upper-right square results in the digit 2.
The numbers 0, 4, 8, and C only require a single tap/click because they have the same start and end square.
Because there are only four buttons instead of sixteen, less precise clicking/tapping is required.
In exchange, most digits are line segments instead of just a point.

**Normal**: Display all digits of a number. Switch to scientific notation when the number gets too long (integer part of a non-integer exceeding 7 digits, or an integer exceeding the Display options Digits setting)**Fixed**: Always display the same number of digits after the decimal point, adding trailing zeros if necessary.**Eng.**: Engineering notation is scientific notation where the exponent is a multiple of three. The corresponding SI prefix abbreviation is also displayed in gray. For example, 16384 is displayed as 16.384×10^{3}.**Eng. Binary**: This is binary scientific notation where the exponent part is a power of 2^{10}. The corresponding IEC binary prefix abbreviation is also displayed in gray. For example, 16384 is displayed as 16×2^{10}.**Scientific**: Standard scientific notation. The exponent base depends on the selected base. Decimal mode uses powers of 10. Binary uses powers of 2. Hexadecimal uses powers of 16 (displayed as 2 to a power of a multiple of 4). For example, 16384 is displayed as 1.6384×10^{4}in decimal, 4×2^{12}in hexadecimal (16384 = 0x4000), and 1×2^{14}in binary.

**Digits**: Chooses the number of digits after the decimal point to display in Fixed notation. Chooses the number of significant digits (including the integer part) in Normal, Eng., Eng. Binary, and Scientific notations.**Group digits**: Enables background shading to make long numbers easier to read. In decimal mode, there are three digits in each group. In binary or hexademical mode, there are four digits per group.

If set to something other than None, the result of every operation is truncated to an integer of the selected number of bits. This is useful when you want to use fixed-length two's complement integers including its overflow behaviour.

Select degrees or radians as the unit for angles for trigonometric functions.