Discussion:
calcular potencias
(demasiado antiguo para responder)
Ruboslav
2003-09-24 20:21:09 UTC
Permalink
Lo siento pero he estado buscando en libros y en la web y nada: no
encuentro como calcular potencias en c (o sea 2 elevado a 3 p ej). me
dijeron que seria haciendo 2^3 o 2**3 pero ambas dan error no se si es el
compilador (uso gcc en Linux) o mi ignorancia (probablemente). de momento
me las he ingeniado creando una función que haga esta operación pero ¿no
hay otro modo más simple?

gracias y perdón si la pregunta es una chorrada pero...
Martin J. Sanchez
2003-09-24 20:27:41 UTC
Permalink
Post by Ruboslav
Lo siento pero he estado buscando en libros y en la web y nada: no
encuentro como calcular potencias en c (o sea 2 elevado a 3 p ej). me
dijeron que seria haciendo 2^3 o 2**3 pero ambas dan error no se si es el
compilador (uso gcc en Linux) o mi ignorancia (probablemente). de momento
me las he ingeniado creando una función que haga esta operación pero ¿no
hay otro modo más simple?
gracias y perdón si la pregunta es una chorrada pero...
pow(x, y) devuelve x elevado a y

Un saludo,
Martin.
Fernando Arbeiza
2003-09-24 20:41:57 UTC
Permalink
Post by Ruboslav
Lo siento pero he estado buscando en libros y en la web y nada: no
encuentro como calcular potencias en c (o sea 2 elevado a 3 p ej). me
dijeron que seria haciendo 2^3 o 2**3 pero ambas dan error no se si es el
compilador (uso gcc en Linux) o mi ignorancia (probablemente). de momento
me las he ingeniado creando una función que haga esta operación pero ¿no
hay otro modo más simple?
En C no hay operador para la exponenciación. Sin embargo tienes la
función

#include <math.h>
double pow(double x, double y);

disponible en C90.

En C99 [1], tienes además de la función pow, otras dos con distintos
prototipos:

#include <math.h>
double pow(double x, double y);
float powf(float x, float y);
long double powl(long double x, long double y);

Y tres para números complejos:

#include <complex.h>
double complex cpow(double complex x, double complex y);
float complex cpowf(float complex x, float complex y);
long double complex cpowl(long double complex x,
long double complex y);

[1] Tu compilador, aun no siendo de C99 puede que las soporte.

<OT> >;>
Recuerda que en algunos compiladores tienes que enlazar con la librería
matemática para utilizar estas funciones.

<Más OT> >>;>
En gcc enlazar con la librería matemática simplemente tienes que
añadir la opción -lm
<Más OT>
</OT>
Post by Ruboslav
gracias y perdón si la pregunta es una chorrada pero...
Para nada, si no preguntas, te quedas sin saber. Pero recuerda que nada
sustituye a un buen libro (donde esta cuestión vendría contestada). Ah,
y también tienes a tu amigo google (no creo que esto sea necesario, pero
ahí va: <URL: http://www.google.com>).

Un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Julián Albo
2003-09-24 20:59:03 UTC
Permalink
Post by Fernando Arbeiza
Para nada, si no preguntas, te quedas sin saber.
Además una pregunta que se puede contestar sin salir de temática siempre
es bienvenida ;)

Salu2
Ruboslav
2003-09-25 00:25:39 UTC
Permalink
Post by Ruboslav
Lo siento pero he estado buscando en libros y en la web y nada: no
encuentro como calcular potencias en c (o sea 2 elevado a 3 p ej). me
dijeron que seria haciendo 2^3 o 2**3 pero ambas dan error no se si es el
compilador (uso gcc en Linux) o mi ignorancia (probablemente). de momento
me las he ingeniado creando una función que haga esta operación pero ¿no
hay otro modo más simple?
gracias y perdón si la pregunta es una chorrada pero...
OK. Me ha quedado claro y además lo tenia en un libro que explica math.h
pero no me habia fijado. Gracias por la aclaración.
JGauss
2003-10-06 19:44:04 UTC
Permalink
### Ruboslav dijo el día Miércoles, 24 de Septiembre de 2003 22:21 en
el grupo es.comp.lenguajes.c ###

int potencia(int numero, int elevado)
{
int resultado=numero;
for (;elevado>1;resultado*=numero,elevado--);
return resultado;
}

¿No es esto simple?

Saludos.
(probablemente). de momento me las he ingeniado creando una función
que haga esta operación pero ¿no hay otro modo más simple?
--
-JGauss-

@ Red Hat Linux 9.0 - Kernel 2.4.20 @
franci72
2003-10-07 21:49:33 UTC
Permalink
Puede que se refiriese a un modo mas eficiente, 555^987654321 es
un poco lento con este metodo, se calcula de forma mas rapida usando
una variable que se va elevando sucesivamente al cuadrado, con lo cual
se obtiene 555^2, 555^4,555^8,... luego otra se va multiplicando o no
por el resultado

busca en google: Handbook of Applied Cryptography,

y luego en esto otro: 2.143 Algorithm Repeated square-and-multiply
algorithm for exponentiation in Zn

----------------------------------------------------------------------
Me he comparado unos kilos de uranio en africa para hacer unas armas
nucleares y ponerselas a bush, a blair y su amigo ansar, perdon aznar.
(Es mentira, pero ya lo usaran los tres amigos para hacer guerras).
Loading...