Подпишись на канал фаундера и разработчика экосистемы tonpie
[Решено] Как возвести число в степень в FunC?
-
Есть ли встроенный способ возведения чисел в степень в FunC? Если его нет и разработчик должен написать функцию, то, вероятно, сообщество уже написало наиболее оптимизированную из них?
Этот вопрос был импортирован из чата Telegram: <***Скрыто***
click to show
-
В func нет такой встроенной функции, поэтому вы должны реализовать ее самостоятельно. Я бы посоветовал использовать двоичное возведение в степень, потому что это решение может сэкономить вам газ
;; Unoptimized variant int pow (int a, int n) { int i = 0; int value = a; while (i < n - 1) { a *= value; i += 1; } return a; } ;; Optimized variant (int) binpow (int n, int e) { if (e == 0) { return 1; } if (e == 1) { return n; } int p = binpow(n, e / 2); p *= p; if ((e % 2) == 1) { p *= n; } return p; } () main () { int num = binpow(2, 3); ~dump(num); ;; 8 }