Moderadores: andre_luis, 51, guest2003, Renie
Diego_Oliveira escreveu:O Calculo real que quero fazer é este abaixo, ele originalmente é de uma planilha do excel em uma macro escrita em VBA estava tentando convertela para minha aplicação.
A = 0.000085511
B = 2.0087
C = 37.811
Ue = (-Log(1 - (UR / 100)) / (A * (T + C))) ^ (1 / B)
Ue = Ue * 100 / (100 + Ue)
Diego_Oliveira escreveu:Obrigado a todos, e Rodrigo_P_A com o POW funcionou beleza, porém estava certo quanto a memoria.
float p_pow (float op, int pow)
{
if (pow == 0)
{
return 1;
}
while (--pow)
{
op *= op;
}
return op;
}
main()
{
float c;
c = p_pow ( 10, 2);
}
p_pow(float base, int exp)
{
if(exp==2)
{
return base*base;
}
else
{
res = p_pow(base,pow/2);
if(exp%2)
{
return res*res*base;
}
else
{
return res*res;
}
}
}
Emilio Eduardo escreveu:
Deve funcionar bem pra caramba no quesito velocidade pois o algoritmo é O(log n) o que vai diminuir o número de instruções a ser feitas no final mas não sei como o PIC trata a pilha de chamadas o que pode complicar a utilização de funções recursivas nele. Se fosse em um computador eu certamente usaria esse algoritmo!
Valeu!
Emilio Eduardo escreveu:Barboza, o truque está quando o expoente for alto, pois o código será executado log de n vezes sendo n o expoente, assim talvez com um expoente 5 não seja rápido mas um expoente 1000 vai ser muito mais rápido, apesar de gastar muito mais memória também! Pois se por exemplo o expoente for 1024 você terá a função rodando 10 vezes que multiplicadas pelo número de instruções ali dentro talvez dê 50 instruções, muito diferente de executar 1000 multiplicações!!
chamada com expoente 2: base*base ----------------> 1
chamada com expoente 4: base^2*base^2 ---------->2
chamada com expoente 8: base^4*base^4----------->3
chamada com expoente 16: base^8*base^8---------->4
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante