# NUM, NUMCHECK

Warning: Display title "NUM, NUMCHECK" overrides earlier display title "NUMCHECK".

command return value value of RC
`NUM expression` value of expression or
empty string if the evaluation fails
0
error code
`NUMCHECK expression` value of expression or
empty string if the evaluation fails
0
warning code

The expression will be evaluated numerically, and the result (textual representation) will be returned. The expression may consist of the following parts:

decimal numbers
`123.456`, `17.5e3`, `100`, `-312.123`, `1e-3`,…
hexa-decimal numbers
`0x1234`, `0xabc`, `0XabC`, …
special constants
`pi` (=3.1415...), `e` (=2.71828...),
`rand` (a linear distributed pseudo random number r; -1≤r<1)
`lran` (a linear distributed pseudo random number r; 0≤r<1)
numerical operators
`-a` (negate), `a+b` (add), `a-b` (subtract), `a*b` (multiply), `a/b` (divide), `a%b` (modulo), `a^b` (power)
logical operators (bitwise)
`!a` (not), `a&b` (and), `a|b` (or), `a^b` (exclusive or)
brackets
`(expression)`
functions
 `setlran(seed)` linear distributed pseudo random number r (0≤r<1)seed is the start value (0≤seed<<1) `sin(x)`, `cos(x)`, `tan(x)` sine, cosine or tangent of x `asin(x)`, `acos(x)`, `atan(x)` inverse sine, cosine or tangent of x `exp(x)` computes `ex` `log(x)` common logarithm of x (base `10`) `ln(x)` natural logarithm of x (base `e`) `sqrt(x)` square root of x (base 10) `abs(x)` absolute value of x (base 10) `int(x)` integer part of x, the fractional part is truncated(range of x: 32bit signed integer) `round(x)` round to the nearest integer of x(range of x: 32bit signed integer) `db(x)` convert level to factor (`10x/20`) `sinc(x)`, `sinx(x)` sinc function: `sin(x) / x` `sign(x)` sign of x; returns -1 if `x<0`, otherwise 1 `hz2bark(x)` convert x from Hertz to Bark `bark2hz(x)` convert x from Bark to Hertz `bit(n)` returns the integer with only bit n (0≤n<32) is set and all other are cleared; can be used to generate bit masks `floor(x)` returns a floating-point value representing the largest integer that is less than or equal to x(range of x: 64bit float) `iserr(rc)`, `iserror(rc)` returns 1 if rc is a STx error code, otherwise 0this function can be used to test the completion code `RC` of a command `iswarn(rc)`, `iswarning(rc)` returns 1 if rc is a STx warning code, otherwise 0this function can be used to test the completion code `RC` of a command `npow2(n)` next power of 2; returns the smallest possible value `2m ≥ n`
Notes
• In case of the expression being syntactically ill-formed, an error (`NUM`) or warning (`NUMCHECK`) is reported.
• The special numerical objects (vectors, matrices) available in EVAL-expressions, can not be used in the `NUM` expressions. Only the use of numerical constants and variables is possible.
• The same expression syntax is used for the INT and INTCHECK, for the numerical expressions in conditions (e.g. IF or WHILE) and for the evaluation of numerical arguments of commands.
• Numerical expressions are evaluated in 64bit floating point precission.
• For logical (operators `!, &, |, ^`) and integer expressions (functions `round, int, bit`) 32bit signed integers are used.
INT, INTCHECK, EVAL, EVALCHECK, SEGMENT
Examples
```// #wave = wave item
#t := num \$#wave[!length] / \$#wave[!srate]          // duration in seconds
// #t = frame length in seconds, #o = overlap in percent
#lfrm := int \$#t * \$#wave[!srate]                   // frame length in samples
#lhop := int \$#t * (1 - \$#o / 100) * \$#wave[!srate] // hopsize in samples
#lfft := int npow2(\$#lfrm)                          // fft length
#df   := num \$#wave[!srate] / \$#lfft                // frequency resolution
```
```// using expressions in a IF statement
if 'db(\$#level)' > 1 then
conlog 'level must be lower or equal 0dB'
#level := 0
end
```