Guide · 03
Entering values
The entry field at the bottom of the stack is where every value starts. It’s a small state machine — numeric mode by default, string mode when you start with a quote, with separate paths for fractions, integers, and unit-bearing quantities.
Numeric mode
Tap digits. A decimal point starts the fractional part. CHS (the ± key) flips the sign. E introduces a scientific-notation exponent.
When you tap ENTER the entry pushes onto the stack as the X register. When you tap an operator instead — +, *, SQRT — the entry is pushed and the operator runs immediately on it. So you don’t always need ENTER; it’s only required when you want to push two values in a row.
Fractions
Three paths:
Divide two integers. Since the coalescing arithmetic landed, integer ÷ integer is a Fraction, not integer-division-truncated-to-zero. Two ways to get the integers in the first place — the _ literal suffix or ->INT promotion — both give the same result:
3_ 4_ / → 3/4
3 ->INT 4 ->INT / → 3/4Approximate from a decimal. Push a double, then ->FRAC. The engine returns the closest exact ratio.
0.75 ->FRAC → 3/4Exact from a known numerator/denominator via ->FRAC. Same shape as decimal-→FRAC, but you pass the two integers explicitly:
3 ->INT 4 ->INT ->FRAC → 3/4Integers
Integers are a distinct type from doubles. Bare numeric literals are doubles by default; integers need an explicit cue. Three ways:
Trailing-underscore literal. <value>_<radix> parses as an integer in the given base. A bare _ is shorthand for base 10. Bases 2 through 36 are supported; digits beyond 9 use letters A-Z (case-insensitive).
42_ → 42 (decimal — same as 42_10)
1010101_2 → 85 (binary)
777_8 → 511 (octal)
FF_16 → 255 (hex — alpha digits work)
deadbeef_16 → 3735928559
ZZ_36 → 1295 (base 36)The prefix digits must all be valid for the given radix; gg_16 (the letter g is digit 16 in base 17+ — out of range for base 16) is rejected.
C-style prefix. 0x for hex, 0b for binary, 0o for octal, 0d for explicit base 10:
0xFF → 255
0b1010101 → 85
0o777 → 511
0d42 → 42The 0d form is rarely useful in isolation — bare digits with the _ suffix (42_) already give you a base-10 Integer — but it’s there for symmetry with the other bases and can be helpful in generated code or scripts where the base is a parameter.
Promotion from a double. ->INT truncates whatever’s on X to an integer:
42 ->INT → 42Some words return integers naturally too — DEPTH, factorial results, the remainder from integer division.
Quantities (numbers with units)
A literal like 4_m parses as 4 metres. The underscore separates value from unit. You can also push a bare number and use the unit picker (covered on the Units page).
Times in colon form
The engine’s HMS tokenizer accepts colon-separated forms — useful for durations, paces, and anything else you’d rather read as clock:
22:30 → 22 minutes 30 seconds (2-field form: minutes, seconds)
1:15:30 → 1 hour 15 minutes 30 seconds (3-field form: hours, minutes, seconds)The 2-field form is minutes-and-seconds — no leading zero for hours needed. The same tokenizer runs on card-calc rows where a value is HMS-shaped (a run time, a pace); 4:30 in a pace row parses as 4 min 30 sec per unit distance.
Backspace and clear
Backspace (⌫ in red on the keypad) clears the rightmost character from the entry while you’re typing. If the entry is empty, backspace does nothing — use DROP to remove the top of the stack instead.