Avaliação de Potências Inteiras
Nosso objetivo é tratar a avaliação computacional eficiente de potências , onde é um número real e é um número inteiro, usando somente as quatro operações algébricas fundamentais. Se , é a resposta trivial. Por outro lado, se (e, obviamente, ), lembramos que . Dessa forma, basta considerar o caso em que é inteiro e positivo.
Estratégia 1: o algoritmo mais intuitivo para
Consiste em usar multiplicações por .
P1: ;
Para faça
P2: ;
Fim Para
Retorne ;
Essa estratégia de avaliação requer produtos ponto-flutuante.
Estratégia 2: usando a expansão binária de
Consiste em varrer os algarismos binários da expansão de , da direita para a esquerda, aplicando duas operações: a de multiplicar por e a de elevar ao quadrado, dependendo se o algarismo encontrado é ou . Três variáveis , e são usadas. O próprio algoritmo calcula a expansão binária de , usando estratégia clássica de dividir por e determinar o resto.
P1: ;
P2: ;
P3: ;
Enquanto faça
P4: ;
P5: ;
P6: Se então faça ;
P7: Se então faça ;
Fim-Enquanto
Retorne ;
Essa estratégia de avaliação requer produtos de números reais, onde é o número de algarismos unitários (1) na expansão binária de . No pior caso, para algum inteiro , e temos e assim seriam necessários produtos reais.
Exemplo: avaliar
9 | 1 | |
4 | ||
2 | ||
1 | ||
0 |
Exemplo: avaliar
15 | 1 | |
7 | ||
3 | ||
1 | ||
0 |
Referências:
[1] https://en.wikipedia.org/wiki/Exponentiation_by_squaring
[2] D. E. Knuth. Seminumerical Algorithms, vol. 2 of The Art of Computer Programming, ssec 4.6.3, 3rd edition. Addison-Wesley, 1998.