10 KiB
TinyExpr++ — Expression Evaluator in Notepad3
Notepad3 includes TinyExpr++, a math expression parser and evaluator. It is used in several places throughout the application to let you write and evaluate math formulas directly.
Where Expressions Are Used
1. Inline Expression Evaluation (=?)
Type a math expression followed by =? (or = then press Enter) to evaluate it in-place.
Enable: Menu → Settings → Evaluate TinyExpr on Selection
Example:
(3+4)*5=?
The =? and the expression are replaced with the result: 35
This also works with selected text — select a math expression, and its result appears in the status bar.
2. Status Bar Expression Display
When Evaluate TinyExpr on Selection is enabled, selecting any text containing a valid expression shows its computed value in the status bar's TinyExpr field.
Multi-selection / rectangular selection is supported — selected values are concatenated and evaluated as a single expression.
3. Go to Line / Column Dialog
The Go to Line dialog (Ctrl+G) accepts expressions, not just numbers:
| Input | Result |
|---|---|
100 |
Goes to line 100 |
50+25 |
Goes to line 75 |
2^10 |
Goes to line 1024 |
The same applies to the Column field.
4. Line Number Expressions (Modify Lines)
The Modify Lines dialog (Alt+M) supports expressions in its prefix/append patterns using the ${expression} syntax. Three variables are available:
| Variable | Description |
|---|---|
L |
Current 1-based line number in the file |
I |
Zero-based iteration index (0, 1, 2, …) |
N |
One-based iteration counter (1, 2, 3, …) |
Examples:
| Pattern | Lines 5–8 produce |
|---|---|
${N} |
1, 2, 3, 4 |
${L} |
5, 6, 7, 8 |
${N*10} |
10, 20, 30, 40 |
${L^2} |
25, 36, 49, 64 |
${0N} |
1, 2, 3, 4 (zero-padded) |
5. Auto-Save Interval
The auto-save interval field in Settings accepts expressions (e.g., 60*5 for 5 minutes).
6. Dark Mode Contrast Setting
The Dark Mode highlight contrast value in the Customize Schemes dialog accepts expressions.
Expression Syntax
Numbers
| Format | Example | Value |
|---|---|---|
| Integer | 42 |
42 |
| Decimal | 3.14 |
3.14 |
| Leading dot | .5 |
0.5 |
| Hexadecimal | 0x1F |
31 |
| Scientific | 1e3 |
1000 |
| Negative scientific | 2.5e-2 |
0.025 |
Operators (by Precedence)
From highest to lowest precedence:
| Precedence | Operators | Description |
|---|---|---|
| 1 | ( ) |
Grouping |
| 2 | + - ~ |
Unary plus, minus, bitwise NOT |
| 3 | ^ ** |
Exponentiation |
| 4 | * / % |
Multiply, divide, modulus |
| 5 | + - |
Add, subtract |
| 6 | << >> <<< >>> |
Bit shift, bit rotate |
| 7 | < > <= >= |
Relational comparison |
| 8 | = == <> != |
Equality / inequality |
| 9 | && |
Logical AND |
| 10 | || |
Logical OR |
Note:
%is the modulus operator (remainder), not a percentage sign.
Examples:
5+5+5/2 → 12.5 (division before addition)
(5+5+5)/2 → 7.5 (parentheses override precedence)
2+5^2 → 27 (exponentiation before addition)
(2+5)^2 → 49
10 % 3 → 1 (remainder of 10÷3)
Constants
| Constant | Value |
|---|---|
PI |
3.14159265358979… |
E |
2.71828182845905… |
TRUE |
1 |
FALSE |
0 |
NAN |
Not-a-Number (invalid) |
Comments
C/C++ style comments are supported inside expressions:
(3 + 4) /* this is a comment */ * 2 → 14
5 + 3 // rest of line is ignored → 8
Function Reference
All function names are case-insensitive (sin, SIN, Sin all work).
Basic Math
| Function | Description | Example |
|---|---|---|
ABS(x) |
Absolute value | ABS(-5) → 5 |
CEIL(x) |
Round up to integer | CEIL(2.3) → 3 |
FLOOR(x) |
Round down to integer | FLOOR(2.7) → 2 |
ROUND(x, n) |
Round to n decimal places | ROUND(3.456, 2) → 3.46 |
TRUNC(x) |
Discard fractional part | TRUNC(3.7) → 3 |
SIGN(x) |
Sign: 1, 0, or −1 | SIGN(-7) → -1 |
CLAMP(x, lo, hi) |
Constrain to range | CLAMP(15, 0, 10) → 10 |
EVEN(x) |
Round up to nearest even | EVEN(3) → 4 |
ODD(x) |
Round up to nearest odd | ODD(4) → 5 |
Powers & Roots
| Function | Description | Example |
|---|---|---|
SQRT(x) |
Square root | SQRT(16) → 4 |
POW(x, y) |
x raised to y | POW(2, 10) → 1024 |
POWER(x, y) |
Alias for POW |
|
EXP(x) |
e raised to x | EXP(1) → 2.71828… |
Logarithms
| Function | Description | Example |
|---|---|---|
LN(x) |
Natural log (base e) | LN(E) → 1 |
LOG10(x) |
Common log (base 10) | LOG10(1000) → 3 |
LOG(x) |
Same as LOG10 (compatibility) |
LOG(100) → 2 |
Trigonometry
| Function | Description |
|---|---|
SIN(x) |
Sine (radians) |
COS(x) |
Cosine (radians) |
TAN(x) |
Tangent |
COT(x) |
Cotangent |
ASIN(x) |
Arcsine → radians |
ACOS(x) |
Arccosine → radians |
ATAN(x) |
Arctangent → radians |
ATAN2(y, x) |
Arctangent of y/x → radians |
SINH(x) |
Hyperbolic sine |
COSH(x) |
Hyperbolic cosine |
Statistics
| Function | Description | Example |
|---|---|---|
SUM(a, b, …) |
Sum of values (up to 24 args) | SUM(1,2,3) → 6 |
AVERAGE(a, b, …) |
Mean of values (up to 24 args) | AVERAGE(2,4,6) → 4 |
MIN(a, b, …) |
Smallest value (up to 24 args) | MIN(3,1,2) → 1 |
MAX(a, b, …) |
Largest value (up to 24 args) | MAX(3,1,2) → 3 |
Combinatorics
| Function | Description | Example |
|---|---|---|
FAC(n) / FACT(n) |
Factorial (n!) | FAC(5) → 120 |
COMBIN(n, k) / NCR(n, k) |
Combinations | COMBIN(5,2) → 10 |
PERMUT(n, k) / NPR(n, k) |
Permutations | PERMUT(5,2) → 20 |
TGAMMA(x) / GAMMA(x) |
Gamma function |
Logic
| Function | Description | Example |
|---|---|---|
IF(cond, yes, no) |
Conditional | IF(1>2, 10, 20) → 20 |
IFS(c1,v1, c2,v2, …) |
Multi-condition (up to 12 pairs) | IFS(0,1, 1,2) → 2 |
AND(a, b, …) |
All true? (up to 24 args) | AND(1,1,0) → 0 |
OR(a, b, …) |
Any true? (up to 24 args) | OR(0,0,1) → 1 |
NOT(x) |
Logical negation | NOT(0) → 1 |
Error Checking
| Function | Description |
|---|---|
NA() / NAN |
Returns NaN (invalid value) |
ISERR(x) / ISERROR(x) |
1 if x is NaN, else 0 |
ISNA(x) / ISNAN(x) |
Alias for ISERR |
ISEVEN(x) |
1 if x is even |
ISODD(x) |
1 if x is odd |
Bitwise Operations
| Function | Description |
|---|---|
BITAND(a, b) |
Bitwise AND |
BITOR(a, b) |
Bitwise OR |
BITXOR(a, b) |
Bitwise XOR |
BITNOT(x) |
Bitwise NOT (auto-selects 32 or 64 bit) |
BITLSHIFT(x, n) |
Left shift by n |
BITRSHIFT(x, n) |
Right shift by n |
RAND() |
Random number between 0 and 1 |
Financial Functions
| Function | Description |
|---|---|
FV(rate, nper, pmt, [pv], [type]) |
Future value |
PV(rate, nper, pmt, [fv], [type]) |
Present value |
PMT(rate, nper, pv, [fv], [type]) |
Periodic payment |
NPER(rate, pmt, pv, [fv], [type]) |
Number of periods |
IPMT(rate, per, nper, pv, [fv], [type]) |
Interest portion |
PPMT(rate, per, nper, pv, [fv], [type]) |
Principal portion |
Optional parameters
[…]default to 0. Thetypeparameter:0= end of period,1= beginning.
Practical Examples
Quick Calculations
256*1024=? → 262144
SQRT(3^2 + 4^2)=? → 5
2*PI*6.371e6=? → 40030173.592… (Earth's circumference in meters)
Unit Conversions
72 * 0.0254=? → 1.8288 (72 inches to meters)
100 / 2.54=? → 39.3701 (100 cm to inches)
(98.6 - 32) * 5/9=? → 37 (Fahrenheit to Celsius)
Programming Helpers
0xFF=? → 255
2^16 - 1=? → 65535
BITLSHIFT(1, 20)=? → 1048576 (1 MB in bytes)
BITAND(0xF0, 0x3C)=? → 48
Line Numbering (Modify Lines Dialog)
| Goal | Prefix pattern |
|---|---|
| Simple line numbers | ${N}. |
| Multiples of 10 | ${N*10}: |
| Even numbers only | ${N*2}: |
| Squared sequence | ${N^2} |
| Zero-padded (001, 002…) | ${0N}. |
| Reverse from 100 | ${100-I} |
| Starting from line number | ${L}: |
Conditional Logic
IF(5>3, 100, 200)=? → 100
IF(AND(10>=5, 10<=15), 1, 0)=? → 1 (range check)
IFS(90>=90, 4, 90>=80, 3, 90>=70, 2, 1,1)=? → 4 (grading)
Locale-Aware Number Formatting
TinyExpr++ in Notepad3 automatically adapts to the decimal separator of the active UI language. When Notepad3 is set to a locale that uses a comma as the decimal mark (e.g., German, French, Spanish), the expression engine switches accordingly:
| English (en-US) | German (de-DE) | |
|---|---|---|
| Decimal separator | . (dot) |
, (comma) |
| Function argument separator | , (comma) |
; (semicolon) |
| Number example | 3.14 |
3,14 |
| Function call | SUM(1.5, 2) |
SUM(1,5; 2) |
| Inline evaluation | 1/3=? → 0.33333333 |
1/3=? → 0,33333333 |
Examples by Locale
English (dot decimal):
ROUND(PI, 4)=? → 3.1416
SUM(1.5, 2.5, 3)=? → 7
IF(2.5 > 1, 10, 20)=? → 10
German / French / Spanish (comma decimal):
ROUND(PI; 4)=? → 3,1416
SUM(1,5; 2,5; 3)=? → 7
IF(2,5 > 1; 10; 20)=? → 10
Tip: The separator style follows the Notepad3 UI language, which is set in Settings → Preferred Language. It does not change when editing files in different encodings.
Notes
- All function names are case-insensitive.
LOG(x)is provided for backward compatibility and evaluates asLOG10(x).- The
%operator computes the modulus (remainder), not a percentage. - Expressions support C/C++ style comments (
/* … */and// …). - Invalid operations (division by zero,
SQRT(-1)) return NaN.
For the full TinyExpr++ reference, see the TinyExpr++ documentation.