почему при указывании 3 элемента, он начинает считать с 1Кто вам такое сказал? Элементы массива в C++ всегда нумеруются начиная с нуля.
mid = arr[(f + l) / 2]; (-x)*(2*i+1)/(2*i) - вещественное число умножается на целое, результат вещественный, затем вещественное число делится на вещественное, результат вещественный.(-x)*((2*i+1)/(2*i)) - целое число делится на целое, результат целое, затем вещественное число умножается на целое, результат вещественный.