На мой взгляд, оптимальный алгоритм такой.
Считаем для начала интеграл по промежутку
![$[-1;1-\delta]$ $[-1;1-\delta]$](https://dxdy.ru/math/f6c22e9371022d66d8c9c17b37c693fa82.png)
, где

, скажем.
Потом добавляем к нему интеграл по
![$[1-\delta;1-{\delta\over2}]$ $[1-\delta;1-{\delta\over2}]$](https://dxdy.ru/math/531baa0e9b2c505cdb3972b04c93c52682.png)
.
Потом -- по
![$[1-{\delta\over2};1-{\delta\over2^2}]$ $[1-{\delta\over2};1-{\delta\over2^2}]$](https://dxdy.ru/math/de2c90f1a0c7ba4dfc1ccfca524fbab482.png)
.
Потом -- по
![$[1-{\delta\over2^2};1-{\delta\over2^3}]$ $[1-{\delta\over2^2};1-{\delta\over2^3}]$](https://dxdy.ru/math/33c2dc6032adb8afd7b49d8429d573dc82.png)
, и т.д.
Контролируя добавки по правилу Рунге. Т.е. до тех пор, пока добавка превышает требуемую точность -- до тех пор и считаем.
Прелесть подхода в том, что на каждом шаге условия применения квадратурной формулы благоприятны. В том смысле, что относительные перепады самой подынтегральной функции (а также максимумы всех мыслимых производных) ведут себя регулярно. В типичных ситуациях. Поэтому и требуемое к-во шагов численного интегрирования на каждом внешнем шаге -- одного порядка.
Правда. Мы заранее не знаем, сколько таких (внешних) шагов придётся сделать. Ну что ж. Сперва грубо оценим необходимое к-во шагов (вычисляя интеграл на каждом шаге с относительной точностью, ну допустим,

). Пусть потребуется

таких шагов. А потом пересчитываем всё заново, вычисляя численно интеграл на каждом шаге с точностью

и до тех пор, пока оценка правилом Рунге не даст результат не хуже, чем

.
Где-то типа так.
Накладные расходы на предварительную прикидку -- будут малы по сравнению со временем уточняющего счёта.