Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Быстрое возведение в степень, являющуюся степенью двойки

Iv Iv Знаток (302), закрыт 6 лет назад
существуют ли способы возводить число (мне нужно комплексное) в степень, являющуюся степенью двойки быстрее, чем за лог? Типа Z^(2^1000) быстрее, чем за 1000 операций
Лучший ответ
Юра Иванников Знаток (388) 6 лет назад
Ну, есть так называемые гипероператоры, например, тетрация. Как это реализовано на машинном уровне - быстрее 1000 операций или нет - не знаю. Возможно, с квантовым компьютером это действительно займет меньше 1000 операций. Но в квантоовм программировании не разбираюсь
Iv IvЗнаток (302) 6 лет назад
Может быть, вы тогда знаете, как быстро считают множество Мандельброта. Допустим, я хочу сильно увеличить этот фрактал и рассмотреть, но сотни итераций начинает не хватать, как тогда быстро зарисовать его в увеличенном масштабе?
Валерий Шестаков Просветленный (25528) Там на каждой итерации кроме возведения в квадрат еще константу нужно прибавить, так что быстрым возведением в степень не обойтись
Остальные ответы
Валерий Шестаков Просветленный (25528) 6 лет назад
a^{2^n}={a^{2^{n-1}}}^2 - раскручивай
Только при таких показателях степени или длинная арифметика, а это долго, или жуткая потеря точности, тогда может попроще функции с похожим поведением найти? Или, в конце концов, при наличии памяти, посчитать заранее и готовыми таблицами пользоваться?
Iv IvЗнаток (302) 6 лет назад
Один хрен, за лог получается
Jurijus Zaksas Искусственный Интеллект (450036) 6 лет назад
Вообще-то мат. сопроцессор "умеет" экспоненты и логарифмы, так что если с компилятором все хорошо, то обычный метод x^y=ln(y*e^x) должен пахать достаточно быстро. С комплексными числами наверняка тоже есть какой-то способ, сходу не придумаю.
impressive_i Мыслитель (5215) 6 лет назад
x^y = exp(y*lnx)
Чтобы быстро найти степень, которая представляет стпень двойки, нужно единицу сдвигать влево побитово. Это компиляторы делают очень быстро.
2^k = 1 << k
Iv IvЗнаток (302) 6 лет назад
Мне нужно не 2 в степень возводить, а комплексное число в степень, являющуюся степенью двойки
impressive_i Мыслитель (5215) Для более удобного возведения в степень комплексного числа его можно перевести в показательную степень или использовать формулу Эйлера. z = x + i*y |z| = sqrt(x^2 + y^2) fi = arg(z) = arctg(y/x) z = |z| * exp(i*fi) z^k = |z|^k * exp(i*k*fi)
Похожие вопросы