Статья ценна комментариями, благодаря которым, с момента первоначальной публикации запрос претерпел значительные изменения. При активном участии сообщества была выполнена оптимизация запроса по быстродействию и уменьшению ошибок вычисления. Таким образом, проделанная работа – успешный опыт совместного решения проблем сообществом Инфостарт.
Важно: На Инфостарт появилась разработка от agrustny: Обработка с обычным (не СКД) запросом, извлекающим корни нужной степени
Язык запросов 1С не позволяет вычислить квадратный корень 1С. Квадратный корень может пригодиться при вычислении среднеквадратического отклонения или геометрических вычислениях. Предложенный метод имеет ограничение на верхнее значение.
Для вычисления квадратного корня в запросе предлагается использовать метод Герона, когда последовательно вычисляется формула
Проблемой является найти начальное значение. Предлагается взять его методом грубой оценки.
принимается равным
, а
Грубое значение будет вычислено как:
Учитывая вышесказанное, запрос по вычислению квадратного корня можно написать так:
ВЫБРАТЬ 0.012345678 КАК Значение ПОМЕСТИТЬ СписокЗначений ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 123.45 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 12345678 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 123456789012345678 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ SQRTS.X КАК Значение, (((SQRTS.Y + SQRTS.X / SQRTS.Y) / 2 + SQRTS.X / ((SQRTS.Y + SQRTS.X / SQRTS.Y) / 2)) / 2 + SQRTS.X / (((SQRTS.Y + SQRTS.X / SQRTS.Y) / 2 + SQRTS.X / ((SQRTS.Y + SQRTS.X / SQRTS.Y) / 2)) / 2)) / 2 КАК КореньКвадратный ИЗ (ВЫБРАТЬ СписокЗначений.Значение КАК X, ВЫБОР КОГДА СписокЗначений.Значение < 0 ТОГДА NULL КОГДА СписокЗначений.Значение < 0.000001 ТОГДА 0.0005623413251903491 КОГДА СписокЗначений.Значение < 0.00001 ТОГДА 0.001778279410038923 КОГДА СписокЗначений.Значение < 0.0001 ТОГДА 0.005623413251903491 КОГДА СписокЗначений.Значение < 0.001 ТОГДА 0.01778279410038923 КОГДА СписокЗначений.Значение < 0.01 ТОГДА 0.05623413251903491 КОГДА СписокЗначений.Значение < 0.1 ТОГДА 0.1778279410038923 КОГДА СписокЗначений.Значение < 1 ТОГДА 0.5623413251903491 КОГДА СписокЗначений.Значение < 10 ТОГДА 1.778279410038923 КОГДА СписокЗначений.Значение < 100 ТОГДА 5.623413251903491 КОГДА СписокЗначений.Значение < 1000 ТОГДА 17.78279410038923 КОГДА СписокЗначений.Значение < 10000 ТОГДА 56.23413251903491 КОГДА СписокЗначений.Значение < 100000 ТОГДА 177.8279410038923 КОГДА СписокЗначений.Значение < 1000000 ТОГДА 562.3413251903491 КОГДА СписокЗначений.Значение < 10000000 ТОГДА 1778.279410038923 КОГДА СписокЗначений.Значение < 100000000 ТОГДА 5623.413251903491 ИНАЧЕ NULL КОНЕЦ КАК Y ИЗ СписокЗначений КАК СписокЗначений) КАК SQRTS