Сколько времени считает одну итерацию?
Поскольку начальный интервал имел размер

, а в итоге сократился до

, то это 30 итераций. Дихотомия же.
Так... послушайте, а зачем Вы при каждом вычислении суммы заново считаете все

и

? И зачем при выборе правого или левого отрезка заново пересчитываете значение суммы в new_a? Да, Вы "идеологически правильно" разнесли все по куче функций без глобальных переменных, но именно это и привело к такой безумной потере производительности.