## Overview

Calculations in ProCalc are done by entering an expression into the expression textbox. ProCalc supports a number of operators and functions, as well as adding user-defined variables and functions.

## Types

ProCalc supports the following numeric types:

Type Description Sample
Integer 64-bit integer value ranging from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 44
Large number A decimal value with up to integer and fraction digits. Only addition, subtraction, multiplication, division and raising to integral (non-large) power is supported for large numbers. 1234567890L
Binary, octal and hexadecimal values Use 0b, 0o and 0h prefix to denote an integer in specific system. 0b1001010
Floating point 64-bit double precision floating point value ranging from ±5.0 x 10?324 to ±1.7 x 10308 with 15 digits of precision. 10.5
Fractions ProCalc attempts to evaluate expressions using the common fractions instead of floating point numbers as long as it is possible. If the calculations involves using floating point values or if the fraction cannot be represented as a common fraction, ProCalc converts the value into floating point value. For example, if you try to evaluate 1 / 3, the result will be a common fraction. However, if you try to evaluate 1.0 / 3 (forcing the first operand to be a floating point value), the result will be a floating point value. The fractions are automatically reduced to the simplest form. You may enter a common fraction by dividing two integers. 4/9
Complex numbers A number followed by the “i” letter is considered to be a imaginary value. 4i
1 + 2i
DMS values A DMS value is a fraction represented as units (degrees), minutes (1/60 of a degree) and seconds (1/3600 of a degree). Internally a DMS value is stored as a common fraction (if possible). 12:30:00
Boolean value Two logical values: true and false. true
Matrices Use the rectangular brackets [ and ] to define a matrix. Inside, use the comma symbol to separate items in row and the semicolon to denote end of row. For example, matrix:

 1 2 3 4

Can be entered by using the following syntax:
[1, 2; 3, 4]
Matrix can contain any numeric value, including nested matrices.

[1, 2, 3; 4-2i, 5+3i, 1/3]
Lists A list contains one or more numeric values. Use curly brackets { and } to enter list and a comma to separate its items. {1, 2, 3}
Strings Use the double-quotes to denote a string. If you want to include the double-quote inside the string, write it twice: “Alice has a “”funny”” cat” “CATS. CATS ARE NICE”

## Supported operators

ProCalc supports the following operators:

Operator Symbol Samples
Addition + 2+2 = 4
[1,2]+[2,5] = [3,7]
1+2i + 3+4i = 4+8i
Subtraction 10-8 = 2
Multiplication * 2*2 = 4
[1,2;3,4]*[5,6;7,8] = [19, 22; 43, 50]
(1+2i)*(3+4i) = 5+10i
Division / 11/2 = 5.5
Integer division \ 11\2 = 5
Modulo % 11%2 = 1
Power ^ 2^10 = 1024
2L^100 = 1267650600228229401496703205376L
Binary shift left << 1200<<5 = 38400
Binary shift right >> 1200>>5 = 37
Less than or equal <= 10<5 = false
More than or equal >= 10>=5 = true
Less than < 10<5 = false
More than > 10>5 = true
Equal == 10==5 = false
Note, that equal operator will always return false when a floating-point value is involved in comparison
Inequal != 10!=5 = true
Note, that inequal operator will always return true when a floating-point value is involved in comparison
And (logical and binary) & true & true = true
0hab & 0hba = 0haa
Or (logical and binary) | true | false = true
10 | 25 = 27
Xor (logical and binary) # true # true = false
10 # 25 = 19
Unary negative value operator -5
Unary logical negation ! !true = false

## Built-in functions

The following built-in functions are available:

Definition Description Example
sin(x) Sine of x. X is in radians. sin(1) = 0.841470984807897
cos(x) Cosine of x. X is in radians. cos(1) = 0.54030230586814
tan(x) Tangent of x. X is in radians. tan(1) = 1.5574077246549
ctg Cotangent of x. X is in radians. ctg(1) = 0.642092615934331
arcsin(x) The inverse sine of x. arcsin(1) = 1.5707963267949
arccos(x) The inverse cosine of x. arccos(1) = 0
arctan(x) The inverse tangent of x. arctan(1) = 0.785398163397448
arcctg The inverse cotangent of x. arcctg(1) = 0.785398163397448
abs(x) Absolute value abs(-5) = 5
round(x) Value rounded to the nearest integer. round(2.6) = 3
round(-2.6) = -3
trunc(x) Integer part of value trunc(2.5) = 2
trunc(-2.5) = -2
frac(x) Fraction part of value frac(2.5) = 0.5
frac(-2.5) = -0.5
sqrt(x) Square root of argument sqrt(4) = 2
sqr(x) Argument, squared. sqr(2) = 4
ln(x) Natural logarithm of argument ln(1) = 0
length(x) Length of a string length(“CATS. CATS ARE NICE”) = 19
copy(x, start, len) Substring of a string copy(“CATS. CATS ARE NICE”, 0, 4) = “CATS”
pos(x, str) Returns position of first occurrence of a substring in string or -1 if the string was not found. pos(“Alice has a cat”, “a”) = 7
insert(str, x, pos) Inserts a string into another string insert(“has “, “Alice a cat”, 6) = “Alice has a cat”
delete(x, start, len) Removes part of a string delete(“Alice has a cat”, 0, 10) = “a cat”
uppercase(x) Converts a string into upper case uppercase(“cats. cats are nice”) = “CATS. CATS ARE NICE”
lowercase(x) Converts a string into lower case lowercase(“CATS. CATS ARE NICE”) = “cats. cats are nice”
strtoint(x) Converts string into integer value strtoint(“5”) = 5
inttostr(x) Converts integer value into string inttostr(5) = “5”

## Defining user variables and functions

To define user variable, use the special operator =. Variable name can consist of small and big letters and digits and must begin with a letter. ProCalc is case-insensitive, thus variable = VARIABLE.

Example:

``````a = 5
b = [1,2;3,4]
c = "Alice has a cat"
``````

To define user function, use the same operator =. Function and function parameter naming rule is the same, as for the variables. Sample function definition follows:

``f(x, y)=sqrt(x^2+y^2)``

Function must have at least one parameter. Function parameter names hides variables with the same names. For example:

``````x=5
y=2
f(x)=x+y``````

In the example, y will be interpreted as a variable, but x – as a function parameter.