# Roots¶

Functions to compute roots of simple equations.

```#include <Imath/ImathRoots.h>
```
template<class T>
constexpr int Imath::solveLinear(T a, T b, T &x)

Solve for x in the linear equation:

```a * x + b == 0
```

Returns:

1 if the equation has a solution, 0 if there is no solution, and -1 if all real numbers are solutions.

template<class T>
constexpr int Imath::solveQuadratic(T a, T b, T c, T x[2])

Solve for x in the quadratic equation:

```a * x*x + b * x + c == 0
```

Returns:

2 if the equation has two solutions, 1 if the equation has a single solution, 0 if there is no solution, and -1 if all real numbers are solutions.

template<class T>
constexpr int Imath::solveNormalizedCubic(T r, T s, T t, T x[3])

Solve for x in the normalized cubic equation:

```x*x*x + r * x*x + s * x + t == 0
```
The equation is solved using Cardano’s Formula; even though only real solutions are produced, some intermediate results are complex (std::complex<T>).

Returns:

0 if there is no solution, and -1 if all real numbers are solutions, otherwise return the number of solutions.

template<class T>
constexpr int Imath::solveCubic(T a, T b, T c, T d, T x[3])

Solve for x in the cubic equation:

```a * x*x*x + b * x*x + c * x + d == 0
```
The equation is solved using Cardano’s Formula; even though only real solutions are produced, some intermediate results are complex (std::complex<T>).

Returns:

0 if there is no solution, and -1 if all real numbers are solutions, otherwise return the number of solutions.