Как возвести число в степень в 1С 8.3

· 9 мин

Содержание

В языке 1С нет оператора ^ или ** — возвести число в степень через знак нельзя. Для этого есть функция Pow(Основание, Показатель): запись Pow(2, 10) вернёт 1024, а Pow(10, 3) — 1000.

Функция принимает любой показатель — целый, дробный, отрицательный, — поэтому через неё же считают корни и обратные величины. А для простых целых степеней (квадрат, куб) быстрее и точнее обычное умножение: Цена * Цена.

Разберём каждый способ возвести число в степень в 1С с примерами кода: оператор умножения, функцию Pow, работу с отрицательными и дробными показателями, извлечение корней и ускорение расчётов в циклах.

Оператор умножения для целых степеней

Отдельного оператора степени в 1С нет. Самый быстрый способ получить квадрат или куб — перемножить число само на себя:

Квадрат = Число * Число;        // вторая степень
Куб     = Число * Число * Число; // третья степень

Например, 5 * 5 даст 25, а 5 * 5 * 5 — 125. Для фиксированной небольшой степени это предпочтительный вариант по двум причинам:

  • ⚡ Скорость. Умножение выполняется напрямую, без вызова функции. В массовых расчётах это заметно.
  • 🎯 Точность. Результат получается целым без погрешности. Функция Pow внутри работает с плавающей точкой и для больших чисел может вернуть приближённое значение.

Если степень известна заранее и не больше 3–4, умножайте. Если показатель — переменная или дробь, нужна функция Pow.

Сравнение двух подходов:

СпособКогда применятьРезультат
Число * Числофиксированная целая степень 2–4точный, быстрый
Pow(Число, N)переменный, дробный или большой показательприближённый (округлить)

Функция Pow — универсальный способ

Pow(Основание, Показатель) возводит первый аргумент в степень второго. Оба аргумента — числа, результат — тоже число.

Результат = Pow(2, 10);  // 1024
Результат = Pow(3, 4);   // 81
Результат = Pow(10, 6);  // 1000000

Русского синонима у функции нет. Даже в русской конфигурации её пишут латиницей — Pow, а не «Степень». Запрос «функция Степень» ведёт именно к Pow: это одна и та же операция, просто имя в коде английское.

Проверьте несколько значений:

ВыражениеЗначение
Pow(2, 8)256
Pow(5, 3)125
Pow(7, 2)49
Pow(10, 0)1
Pow(1, 100)1

Внутри Pow считает через вещественную арифметику. Для больших показателей возможна потеря точности в последних разрядах. Если нужен строго целый результат, оберните вызов в Окр(Pow(…), 0).

Показатель может быть и переменной, и результатом другого выражения. Это главное преимущество Pow перед умножением: степень не нужно знать заранее.

Степень  = ВводПользователя;   // например, 4
Результат = Pow(Основание, Степень);

Практический пример — сложные проценты. Вклад под 10% годовых за 3 года растёт в Pow(1.1, 3) = 1,331 раза:

Итог = 100000 * Pow(1 + 0.10, 3);  // 133100

Если показатель приходит из документа или настройки, ту же формулу используют для расчёта коэффициентов индексации, дисконтирования и амортизации — везде, где величина растёт или убывает в геометрической прогрессии.

Отрицательные и дробные показатели степени

Показатель может быть отрицательным. Тогда Pow возвращает обратную величину:

Pow(2, -1);  // 0.5   (1 / 2)
Pow(2, -2);  // 0.25  (1 / 4)
Pow(10, -3); // 0.001

Это удобно, когда нужно разделить на степень числа, не записывая деление вручную. Pow(2, -3) равно 1 / 8, то есть 0,125. Отрицательные показатели применяют в дисконтировании: приведённая стоимость будущего платежа считается как Сумма * Pow(1 + Ставка, -Лет).

Дробный показатель даёт корень. Pow(2, 0.5) — это квадратный корень из 2, примерно 1,41421:

Pow(16, 0.5);   // 4      — корень квадратный
Pow(27, 1/3);   // ≈3     — корень кубический
Pow(32, 0.2);   // 2      — корень пятой степени

Основание ноль с отрицательным показателем — это деление на ноль. Pow(0, -1) вызовет ошибку выполнения. Проверяйте основание перед вызовом.

В 1С оператор / всегда выполняет вещественное деление, поэтому 1/3 даёт 0,3333…, а не ноль. Благодаря этому запись Pow(27, 1/3) корректна и вернёт число, близкое к 3.

Квадратный корень и корни произвольной степени

Для квадратного корня есть отдельная функция Sqrt(Число) — она короче и читается яснее, чем возведение в степень 0,5:

Sqrt(9);    // 3
Sqrt(144);  // 12
Sqrt(2);    // ≈1.41421

Корень любой другой степени берут через Pow с показателем 1/N:

КореньЗаписьРезультат
квадратныйSqrt(49) или Pow(49, 0.5)7
кубическийPow(8, 1/3)≈2
4-й степениPow(16, 0.25)2
5-й степениPow(243, 1/5)3

Из-за вещественной арифметики кубический корень из 27 вернёт не ровно 3, а 2,99999… Если результат нужен целым, округлите: Окр(Pow(27, 1/3), 0).

Корень из отрицательного числа в действительных числах не существует. Sqrt(-4) и Pow(-4, 0.5) завершатся ошибкой, поэтому отрицательные основания отсекайте заранее.

Проверьте себя
Что вернёт `Pow(2, 10)`?
Как получить квадратный корень из 16 в 1С?
Чему равен `Pow(2, -1)`?

Примеры задач, где в 1С нужны степени

Степени встречаются не только в учебных примерах. Вот три типовые задачи, где они решают дело.

Сложные проценты и рост вклада. Сумма под фиксированный процент за N периодов растёт в Pow(1 + Ставка, N) раз. Вклад 100 000 ₽ под 10% годовых за 3 года:

Ставка = 0.10;
Лет    = 3;
Итог   = 100000 * Pow(1 + Ставка, Лет);  // 133100

За те же 3 года коэффициент роста равен Pow(1.1, 3) = 1,331. Поменяйте Лет на 5 — получите Pow(1.1, 5) ≈ 1,61051, то есть 161 051 ₽.

Округление до нужного разряда. Чтобы округлить до сотен или тысяч, домножают на степень десятки, округляют и делят обратно:

Разряд = Pow(10, 3);                 // 1000
Округлённое = Окр(Сумма / Разряд, 0) * Разряд;

Для суммы 1 234 567 это даст 1 235 000. Меняя показатель у Pow(10, …), настраиваете точность: Pow(10, 2) — до сотен, Pow(10, 6) — до миллионов.

Геометрическая прогрессия. N-й член прогрессии с первым элементом a и знаменателем q равен a * Pow(q, N - 1). Пятый член прогрессии 2, 6, 18, … (знаменатель 3):

Член5 = 2 * Pow(3, 5 - 1);  // 2 * 81 = 162

Площадь квадрата со стороной a — это a * a, объём куба — a * a * a. Для таких фиксированных степеней умножение короче и точнее, чем Pow.

Обработка ошибок и исключительных ситуаций

Три операции со степенями дают ошибку выполнения, а не просто неверное число. Их нужно либо предотвратить проверкой, либо поймать конструкцией Попытка … Исключение:

Диагностика: выберите симптом

Безопасный шаблон с перехватом исключения:

Попытка
    Корень = Sqrt(ВходноеЧисло);
Исключение
    Сообщить("Нельзя извлечь корень из " + ВходноеЧисло);
    Корень = 0;
КонецПопытки;

Для частых проверок дешевле обойтись условием Если ВходноеЧисло >= 0 Тогда …: оно не требует обработки исключения и работает быстрее, чем блок Попытка. Проверку знака ставьте до вызова Sqrt или дробной степени — так некорректное значение не дойдёт до функции и расчёт не оборвётся на середине.

Ускорение расчётов в циклах

В длинных циклах каждый вызов Pow стоит времени. Три приёма убирают лишнюю нагрузку.

  1. Выносите постоянную степень из цикла. Если показатель не меняется между итерациями, посчитайте результат один раз до цикла, а внутри используйте готовую переменную:
Коэффициент = Pow(1.1, 3);          // один раз
Для Каждого Строка Из Таблица Цикл
    Строка.Сумма = Строка.База * Коэффициент;
КонецЦикла;
  1. Для фиксированной целой степени замените Pow умножением. Pow(Х, 2) внутри миллиона итераций заметно медленнее, чем Х * Х.

  2. Предрассчитайте таблицу степеней. Для форматирования копеек, разрядов или шкал удобно один раз заполнить массив степенями десятки:

СтепениДесятки = Новый Массив;
СтепениДесятки.Добавить(1);       // 10^0
Для Разряд = 1 По 9 Цикл
    СтепениДесятки.Добавить(СтепениДесятки[Разряд - 1] * 10);
КонецЦикла;
// СтепениДесятки[2] = 100, СтепениДесятки[6] = 1 000 000

Такой массив строится одним умножением на шаг и полностью целочисленный — ни одной погрешности и ни одного вызова Pow.

Где написать и проверить код со степенью

Функции Pow и Sqrt доступны в любом программном модуле: общем модуле, модуле формы, модуле объекта, во внешней обработке. Писать код удобно в Конфигураторе или в режиме «1С:Предприятие» через внешнюю обработку с модулем.

Быстро проверить выражение, не запуская весь механизм, помогает отладчик. Поставьте точку останова, и в окне Табло (или через пункт Вычислить выражение) введите, например, Pow(2, 10) — платформа сразу покажет 1024.

Для разовых расчётов проще сделать внешнюю обработку: в модуле пишете строку с Pow и Сообщить(…), открываете через Файл → Открыть и запускаете. Результат выводится в служебные сообщения.

Если нужно только прикинуть число, не трогая конфигурацию, внешняя обработка — самый безопасный способ: она не меняет базу и не требует монопольного доступа.

Частые ошибки при возведении в степень

Ошибки здесь почти всегда одинаковые — вот на что смотреть в первую очередь:

  • ❌ Пишут 2 ^ 10 или 2 ** 10. Таких операторов в языке 1С нет, модуль не скомпилируется. Только Pow(2, 10).
  • ❌ Ждут ровно целый результат от Pow. Кубический корень и дробные степени возвращают число с «хвостом» 2,9999…; оборачивайте в Окр(…, 0), если нужно целое.
  • ❌ Думают, что 1/3 в показателе даст ноль. В 1С деление вещественное, 1/3 = 0,3333…, корень считается правильно.
  • ❌ Подставляют отрицательное основание в Sqrt или дробную степень. Это ошибка выполнения — проверяйте знак заранее.
  • ❌ Вызывают Pow в цикле с неизменным показателем. Вынесите расчёт за пределы цикла или замените умножением.
  • ❌ Ищут функцию «Степень» или «Корень» по-русски. Таких имён нет: степень — Pow, квадратный корень — Sqrt, оба латиницей.
Есть ли в 1С оператор `^` для возведения в степень?
Нет. В языке 1С нет ни ^, ни **. Единственный способ — функция Pow(Основание, Показатель), а для квадрата проще умножение Число * Число.
Почему `Pow(27, 1/3)` возвращает 2,9999…, а не 3?
Функция считает через вещественную арифметику, поэтому результат приближённый. Если нужно целое, округлите: Окр(Pow(27, 1/3), 0).
Можно ли возвести отрицательное число в дробную степень?
Напрямую нет — будет ошибка. Вычисляйте по модулю основания и присваивайте знак результату отдельно: например, кубический корень из −8 это -Pow(8, 1/3).
Чем `Pow(Х, 2)` отличается от `Х * Х` по скорости?
Результат одинаковый, но умножение быстрее и всегда целочисленное. Для фиксированных степеней 2–4 используйте умножение, для переменных и дробных показателей — Pow.
Есть ли русское имя у функции `Pow`?
Нет. И в русской конфигурации её пишут латиницей — Pow. Функции с именем «Степень» в языке 1С не существует.