# Generic functions¶

Apart from Trigonometric functions, there are also generic functions that can be used in any Numerical P System simulated in Pep. The generic functions are:

- sqrt
- abs
- log
- log10
- log2

An example Numerical P System that uses the previous list of functions can be found in `input_files/input_generic_func.pep`

and is also shown below:

```
num_ps = {
# membrane names (labels)
H = {m1, m2};
# test generic functions (Matlab/Octave names):
# sqrt, abs, log, log10, log2
structure = [m1 [m2 ]m2 ]m1;
m1 = {
var = {rez_1};
# rez = 22.935 (3.3166 + 12 + 2.5649 + 1.1461 + 3.9069)
pr = {sqrt(11) + abs(0 - 12) + log(13) + log10(14) + log2(15) + rez_1 * 0 -> 1|rez_1};
var0 = (0);
};
m2 = {
var = {rez_2};
# rez = 20.480 (4.6904 + 4 + 2.9444 + 0.84510 + 8)
pr = {sqrt(11 * 2) + abs((0 - 12) / 3) + log(13 + 6) + log10(14 - 7) + log2(2 ^ 8) + rez_2 * 0 -> 1|rez_2};
var0 = (0);
};
}
```

The output of the Numerical P System, for a single execution step was obtained after executing the following command:

```
./pep.py input_files/input_generic_func.pep -n 1
```

and offers the following output:

```
INFO reading input file
INFO building NumericalPsystem
INFO building membrane list
INFO building membrane structure
INFO building Membrane
INFO building variable list
INFO building Program
INFO building production function
INFO building distribution rule
INFO building var0 list
INFO building Membrane
INFO building variable list
INFO building Program
INFO building production function
INFO building distribution rule
INFO building var0 list
num_ps = {
m1:
var = { rez_1: 0.00, }
E = {}
pr_0 = { sqrt ( 11 ) + abs ( 0 - 12 ) + log ( 13 ) + log10 ( 14 ) + log2 ( 15 ) + rez_1 * 0 -> 1|rez_1 }
m2:
var = { rez_2: 0.00, }
E = {}
pr_0 = { sqrt ( 11 * 2 ) + abs ( ( 0 - 12 ) / 3 ) + log ( 13 + 6 ) + log10 ( 14 - 7 ) + log2 ( 2 ^ 8 ) + rez_2 * 0 -> 1|rez_2 }
}
INFO Starting simulation step 1
INFO Simulation step finished succesfully
num_ps = {
m1:
var = { rez_1: 22.93, }
E = {}
m2:
var = { rez_2: 20.48, }
E = {}
}
```

The P object values that are printed by the simulator are not always precisely equal to those obtained in other mathematical software. The reason is that during the printing of each value, these are rounded to the nearest 2 digit value. The internal calculations are always done using *double* precision floating point values.