# Math Functions

In this section are the GPC functions used to perform specific mathematical operations. Two important things to note when working while performing math computations in GPC is that it is a signed 16bit environment so all operations must work within that range which is -32768 to +32767 and GPC only supports integer values which means any fractions will be rounded down to a whole value.
 Function Description Zen Plus ​abs​ Returns an absolute value of a number ✔️ ✔️ ​inv​ Returns the inverse value of a number ✔️ ✔️ ​pow​ Raise and value to the specified power ✔️ ✔️ ​isqrt​ Calculates an integer square root ✔️ ✔️ ​random​ Generates a random value between the specified range ✔️ ❌

## abs

`abs`command returns the absolute value of an expression. An absolute value is a number without regard for its sign, for example the absolute value of 8 and -8 is 8. An absolute value can also be thought of as its distance from zero which is always a positive value.
One of the popular uses for the abs command is when working with axis to start combos. Such as in fighting games where many users tend to use the right stick to start a combo. So if you wished for the same combo to be run if the right stick was pushed left or right, instead of using the 'or' ( || ) operator or using two if commands you could just do this:
main {
if( abs(get_val(XB1_RX)) > 70 ) // if RX is greater than 70 or less than -70
combo_run(my_combo);
}
combo my_combo {
//Do something
}

#### ​🔴 Syntax

`abs ( <expression> );`

#### ​⚪ Parameters

<expression> : any expression which has a value

#### ​🔵 Returns

The absolute value of the expression

## inv

`inv` returns the inverted value of an expression or number. This means a positive value will be turned in to a negative value and vice versa, which is the same as multiplying the value by -1. For example;
int a = 100;
int b = -50;
main {
a = inv(a); // a = -100
b = inv(b); // b = 50
}
One of the popular uses for this command is to invert the right sticks Y axis. For example, if you prefer to play with an inverted aim but come across a game which doesn't support it, with one line of code you can have the Cronus invert the axis for you. Like so:
main {
// Set RY to the inverse of its current value
set_val(XB1_RY, inv(get_val(XB1_RY)) );
}

#### ​🔴 Syntax

`inv( <expression> );`

#### ​⚪ Parameters

<expression> : any expression which has a value.

#### ​🔵 Returns

The inverted value of the expression

## pow

`pow` raises the given value to the power specified. What this means is a value will be multiple by itself X amount of times. For example:
int a;
main {
a = pow(5, 3); // a = 125 (5³) or (5 * 5 * 5)
}
This function must be used with caution as there is a risk of an integer overflow when using it. This would occur when the function attempts to return a value greater than 32767 which is the maximum value for a signed 16 bit integer.

#### ​🔴 Syntax

`pow ( <base_value> , <power_value> );`

#### ​⚪ Parameters

<base_value> : base number . <power_value> : power raised to the base value.

#### ​🔵 Returns

It returns the base value raised to the power of the exponent.

## isqrt

`isqrt` returns the square root of a given value. The square root of a value is the value which when multiplied by itself equals the given value. For example, the square root of 25 is 5 (5 * 5 = 25). The return value is an integer which means any fractions will be dropped. As shown below:
int a;
main {
a = isqrt(10); // a = 3. The square root of 10 is 3.16...
// GPC supports integer values only so the fraction is dropped.
}

#### ​🔴 Syntax

`isqrt ( <expression> );`

#### ​⚪ Parameters

<expression> : any expression which has a value.
🔵
Returns
The square root of the given expression

## random

`random` generates a random `int` between two numbers (minimum -32768 and maximum 32767)
This function is only available with Cronus Zen
int a = 5; // minimum value of the integer to randomize
int b = 3999; // maximum value of the integer to randomize
int c;
main {
c = random(a,b); // generates a random number and assigns the result to c;
}

#### ​🔴 Syntax

`random ( <min_value> , <max_value> );`

#### ​⚪ Parameters

<min_value> : the minimum integer value to start your random number (minimum value -32768) <max_value> : the maximum integer value to start your random number (maximum value 32767)

#### ​🔵 Returns

Generates a random `int` value between the <min_value> and the <max_value> parameters.