Alternativa a pow? [c]

Iniciado por flacc, 10 Diciembre 2010, 04:34 AM

0 Miembros y 1 Visitante están viendo este tema.

flacc

Hola, como sabran o se imaginaran, soy adicionado a la informatica, y en el libro todavia no he visto la función pow, asi que me preguntaba si  "num ^ exp" seria  valido para calcular la potencia de algun numero. saludoss

karmi

no se mucho de programacion, pero no es valido, tienes que usar ejemplo..POW(2,4)

netk0

¿5 elevado a la 10 ?

int var = 5 ** 10;
*nix fan, *gnu user, *BSD LOVER

flacc

#3
no sirve :-(

netk0

ya fue hacelo con un for que recorra tantas veces (n potencia) ...
*nix fan, *gnu user, *BSD LOVER


barrabass

depende de lo que busques podes usar esto:

int pot(int,int);

int main(){
    pot(5,10);
   return 0;
}

int pot(int h,int p){
    if(p==0)return 1;
    int i,w;
    w=h;
    for(i=1;i<p;i++)
    h=h*w;
    return h;
}

BlackZeroX

#7
.
Código (cpp) [Seleccionar]


#include <iostream>

using namespace std;

long double pow (double x, unsigned long n);

int main() //(int argc, char *argv[])
{
    cout << pow(5.2,8) << endl;
    cin.get();
    return 1;
}

long double pow (double x, unsigned long n)
{
    long double p;
    for ( p=1 ; n>0 ; --n )
        p *= x;
    return p;
}



Temibles Lunas!¡.
.
The Dark Shadow is my passion.

ghastlyX

Cita de: mini_nauta en 10 Diciembre 2010, 04:34 AM
Hola, como sabran o se imaginaran, soy adicionado a la informatica, y en el libro todavia no he visto la función pow, asi que me preguntaba si  "num ^ exp" seria  valido para calcular la potencia de algun numero. saludoss
Ese operador es la XOR bit a bit. No hay un operador para calcular potencias en C, tienes que usar la función pow como ya te han dicho o hacerte una tú mismo.

Te dejo un código que calcula potencias usando Divide&Conquer con una complejidad de O(logn) (los que te han puesto son O(n)). Esto es útil sobretodo cuando se quieren calcular potencias muy grandes módulo un cierto número.

#include <stdio.h>

int eleva(int base, int exp) {
    if (exp == 0) return 1;
    int res = eleva(base, exp/2);
    res *= res;
    if (exp%2 == 1) res *= base;
    return res;
}

int main() {
    int base, exp;
    scanf("%d %d", &base, &exp);
    printf("%d\n", eleva(base, exp));
}

flacc

graciasya toy probando..saludoss