I use the GNU Emacs Calc, an RPN calculator, exclusively unless I’m away from a computer; as a programming, scientific and general calculator. This is my cheat sheet for my oft-used functions. There’s also a printable, broad-coverage official reference card (PDF). True to Emacs’ documenting tradition, the manual documents all features extensively, with examples too.
Programming
Binary
- Set binary radix:
d 2- Prefix with
Oto display two’s complement as2##1100instead of-2#0100- Notice
#-count for disambiguation
- Notice
- Other useful radices:
16,0and8
- Prefix with
- Set word size (32 bits by default) before doing anything interesting:
b w- Set negative word size if you want to work on signed numbers
- Arithmetic
-1320 >> 4=65530(base = 16) instead of-83(base = -16)
- Arithmetic
- Manually clip values to $2^w$:
b c - Set word size per-operation (except shifts/rotates) with prefix:
C-u SIZE- Example:
C-u 4 b nflips bits and clips to $2^4$
- Example:
- Set negative word size if you want to work on signed numbers
- Enable leading zero display:
d z- Useful to see the entire word
- Enable digit grouping:
d g - Input numbers in a particular radix:
R#DIGITSe.g.16#f00ba4 - Most useful binary operations start with prefix
b- Binary NOT:
b n - Binary AND, OR, XOR, DIFF:
b a,b o,b x,b d- Takes two operands from stack
- DIFF is actually bits set in
Xbut not inYi.e.X & ~Y
- Shift:
b l,b r,b R,b L- Takes 1 or prefix as second operand; use top-of-stack with Hyperbolic prefix
H - Uppercase does arithmetic shift; arithmetic left shift makes sense with negative arguments
- Takes 1 or prefix as second operand; use top-of-stack with Hyperbolic prefix
- Rotate:
b t- Takes 1 or prefix as second operand; use top-of-stack with Hyperbolic prefix
H - Use negative second operand for rotate-right
- Takes 1 or prefix as second operand; use top-of-stack with Hyperbolic prefix
- Binary NOT:
Misc
- Integer divide quotient / reminder:
\/%- Note: floors (rounds → -∞) unlike the truncating C integer division (rounds → 0)
- Floor, Truncate, Ceil, Round:
F,I R,I F,R - Vector
- (Euclidean) Length / l-2 norm:
A - Dot / Cross products:
*/V C - Determinant / Inverse / Transpose:
V D/&/v t - Element-wise add (map):
V M + - Sum elements (reduce):
V R + - Pack / Unpack / Reverse:
v p/v u/v v
- (Euclidean) Length / l-2 norm:
- Convert to new unit / base unit:
u c/u b- Input with unit using algebraic input e.g.
' 60 km/hr- Temperature units:
degC,degF,K
- Temperature units:
- Input with unit using algebraic input e.g.
- Prime numbers
- Test prime:
k p - Prime factorize:
k f - Next/Previous prime:
k n,I k n
- Test prime:
- Random number:
k r- Between [0, M) or (M, 0] depending on sign(M); M is top-of-stack or prefix
- Use
1.(mind the decimal point) to generate numbers between [0, 1) - Random again (same M):
k a
- Shuffle $\binom{n}{k}$:
k h- Takes
nandkfrom stack and returns a list - Shuffle top-of-stack list with prefix:
C-u -1
- Takes
- Permutation (${}_n\mathrm{ P }_k$) and Combination (${}_n\mathrm{ C }_k$):
H k c,k c- Factorial:
!
- Factorial:
Scientific
- Get constants
| Key | Constant | Name | Value |
|---|---|---|---|
P | $\pi$ | Pi | 3.14159265359 |
H P | $e$ | Euler’s number | 2.71828182846 |
I P | $\gamma$ | Euler’s constant | 0.577215664902 |
I H P | $\phi$ | Golden ratio | 1.61803398875 |
- Floating-point / Fixed-point / Scientific notation:
d n/d f/d s - Set precision:
p - Log of top-of-stack to base top-but-one-of-stack:
B- Integer log of top-of-stack to base top-but-one-of-stack:
f I - $log_{10}$:
H L - $ln$:
L
- Integer log of top-of-stack to base top-but-one-of-stack:
- Square root:
Q- Integer square root:
f Q - n-th root:
I ^
- Integer square root:
- Raise to power:
^ - Reciprocal:
& - Convert to fraction/float:
c F/c f - Change to radians/degrees:
m r/m d - Calculate sin and cos:
calc-sincos
General
- Edit top-of-stack: backtick
- Rotate stack:
C-u 0 M-TAB