calc
ARES System Manual: calc Application
The
Unlike lslisp and the expressions used by input,
It may seem excessive to implement a command-line calculator program for ARES, but the ability to do math in
Supported symbols
ARES calc recognizes the following non-numeric keywords: << >> + - ** * / % ^ ~ && || & | ( )
Numbers will be interpreted as integers unless they contain a decimal point. If either argument to a binary operator is a float, the result will be a float.
To input a hexadecimal value, prefix it with
Operator precedence classes
Parentheses: ( )
Unary numeric operators: - ~ (unary negation, bitwise complement)
Exponentiation: << >> ** (left shift, right shift, exponentiation)
Production: * / % (multiplication, division, modulo)
Summation: + - (addition, subtraction)
Bitwise operators: ^ & | (bitwise XOR, bitwise AND, bitwise OR)
Unary boolean operator: ! (NOT)
Binary boolean operators: && || (boolean AND, boolean OR)
All operators in
Random number generation
The
When no additional arguments are specified, the result is a floating point value between 0.0 and 1.0.
When one argument (
When two arguments (
calc <calculation>
: Performs arithmetic.
calc -x <calculation>
: Return result in hexadecimal.
calc -d <value>
: Decode ARES signal.
calc -e <value>
: Encode ARES signal.
calc -r [[<min>] <max>]
: Generate random number.
The
calc
program performs decimal arithmetic with integers and floating-point numbers. It is low-precision, and limited to LSL native data types.
Unlike lslisp and the expressions used by input,
calc
implements a parser that correctly respects operator precedence (order-of-operations).
It may seem excessive to implement a command-line calculator program for ARES, but the ability to do math in
.as
scripts without depending on input
's limited memory is expected to be valuable in the future.
Supported symbols
ARES calc recognizes the following non-numeric keywords: << >> + - ** * / % ^ ~ && || & | ( )
Numbers will be interpreted as integers unless they contain a decimal point. If either argument to a binary operator is a float, the result will be a float.
To input a hexadecimal value, prefix it with
0x
, as in LSL and C.
Operator precedence classes
Parentheses: ( )
Unary numeric operators: - ~ (unary negation, bitwise complement)
Exponentiation: << >> ** (left shift, right shift, exponentiation)
Production: * / % (multiplication, division, modulo)
Summation: + - (addition, subtraction)
Bitwise operators: ^ & | (bitwise XOR, bitwise AND, bitwise OR)
Unary boolean operator: ! (NOT)
Binary boolean operators: && || (boolean AND, boolean OR)
All operators in
calc
are left-associative. This may occasionally result in some surprising results, e.g. 2**3**4 is (2**3)**4 (equal to 2048) rather than 2**(3**4) (equal to 2417851639229258349412352, which is much too big for LSL).
Random number generation
The
-r
flag causes calc
to generate a random number.
When no additional arguments are specified, the result is a floating point value between 0.0 and 1.0.
When one argument (
<max>
) is specified, the result is an integer value between 0 and <max>
- 1.
When two arguments (
<min>
and <max>
) are specified, the result is an integer value between <min>
and <max>
- 1.