# Chapter 2. Mathematical Functions

While discussing variables, we already used the simplest mathematical operations: addition, subtraction, multiplication, and division. These operations do not require any special notation and can be performed using basic characters: plus (+), minus (-), asterisk (*), and slash(/), respectively. Also, declaration of Boolean variables often implies using comparison operators: greater than (>), less than (<), greater than or equals to (>=), less than or equals to (<=), etc. There are also equality operators falling into the same group. To test if two values are equal, use the double equals sign (==). For the inequality, use either '!=' or '<>' signs.

Here is an example script for using equality/inequality operators:

`def a = close==open;def b = close!=open;def c = close<>open;`

Variables b and c are identical: they will both have values of 0 for bars closing at the Open price (sometimes called Doji candles) and 1 for the rest; values of variable a will be vice versa.

The full list of comparison operators can be found here; don't be surprised when you see that thinkScript® accepts some English words as operators, this will be thoroughly explained in chapter 7.

For more complex calculations you might need some of thinkScript® mathematical/trigonometric functions. Let's start with power-related ones. These functions allow you to raise a value to a power, or find an exponential value or a logarithm. Study the following script:

`def val = close/open;def data1 = Sqr(val);def data2 = Sqrt(val);def data3 = Power(val, 3);def data4 = Exp(val);def data5 = Lg(val);def data6 = Log(val);`

This script calculates six data values based on the initial value of the Close to Open ratio for each bar. `Data1` calculates the square of this value with `Sqr function`. `Data2` returns the square root using `Sqrt` function. `Data3` uses `Power` function to raise the value to the power of 3. `Data4` calls the `Exp` to raise Euler's number to the power of the value. `Data5` returns the common logarithm of the value and `data6`, the natural logarithm; functions `Lg` and `Log` are used for these purposes, respectively.

Let's study the syntax of calling functions in thinkScript®: first, you type the name of the function, then you specify its arguments in parentheses and terminate the line with semicolon. If a function requires several arguments, they need to be separated with a comma – see how it works with `data3` variable in the example above. Function `Power` requires two arguments: value to be raised (in our case, it is variable `val`) and the power to raise this value to (we used 3 in the example).

When working with power-related functions, you might want to use the Euler's number. There is a built-in constant in thinkScript® for this purpose: `Double.E`. Word `Double` in its name has nothing to do with multiplying by 2: it is just a common thinkScript® designation of floating-number data type. See how to use this constant in the following script:

`def val = close/open;def data1 = Exp(val);def data2 = Power(Double.E, val);`

Variables `data1` and `data2` will always return identical values as they both raise Euler's number (`Double.E`) to the power of `val`.

Next set of functions we are going to discuss is trigonometric. It consists of six functions: `Cos, Sin, Tan, ACos, ASin,` and `ATan`. All of these use a single argument for which the value will be returned. Note that functions `Cos, Sin,` and `Tan` use arguments expressed in radians so that `Double.Pi` constant might be useful. Functions `ACos, ASin,` and `ATan` return values in radians; for details, see the corresponding articles in thinkScript® reference.

thinkScript® also provides you with a number of functions which round values if for some reason fractions or irrational numbers are not desired. These functions are: `Ceil, Floor, Round, RoundDown,` and `RoundUp`. Here is an example:

`def data1 = Ceil(Double.E);def data2 = Floor(Double.E);def data3 = RoundUp(Double.E, 3);def data4 = RoundDown(Double.E, 3);def data5 = Round(Double.E, 3);`

In this script, Euler's number is rounded using five different algorithms, thus the results will be different. `Data1` uses the `Ceil` function rounding the number to the closest integer which is not less than the number itself; the result is 3. `Data2` uses the `Floor` function which also rounds the number to the integer, however, this integer must not be greater than the number rounded, so the result is 2. Functions `RoundDown, RoundUp,` and `Round` reduce the length of the value to the specified number of digits after the decimal point (for this purpose we specified the second argument in parentheses, 3). While `RoundUp` function rounds the number to the greater one, `RoundDown` does towards zero, and `Round` to whichever is closer. So, in the example above, `data3` will be equal to 2.719 while both `data4` and `data5` will be equal to 2.718. However, if you round the values to four decimal places (using (Double.E, 4) as the arguments), `data3` and `data5` will be both equal 2.7183 and `data4` will be equal to 2.7182.

The full list of available functions with detailed descriptions can be found in the Mathematical & Trigonometric section of thinkScript® reference, so feel free to research those in order to apply some complex math to your scripts if needed. Now we are going to move on to next chapter where we will discuss inputs which will make your script super flexible and adjustable via the Edit Studies and Strategies dialog window.