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.