The main formulas used in Balancer protocol make use of a form of exponentiation where both the base and exponent are fixed-point (non-integer) values. Take for example the `swap`

functions, where the weights in both the exponent and the base are fractions:

$A_o = \left(1 - \left(\frac{B_i}{B_i+A_i}\right)^{\frac{W_i}{W_o}}\right).B_o$

Since solidity does not have fixed point algebra or more complex functions like fractional power we use the following binomial approximation:

which converges for ${|x| < 1}$.

When $\alpha>1$ we split the calculation into two parts for increased accuracy, the first is the exponential with the integer part of $\alpha$ (which we can calculate exactly) and the second is the exponential with the fractional part of $\alpha$: