elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en ejercicio de exponencial
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en ejercicio de exponencial  (Leído 1,725 veces)
andoporto

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Error en ejercicio de exponencial
« en: 4 Febrero 2015, 16:19 pm »

Hola!
Estoy tratando de encontrarle el error a mi ejercicio de Exponencial y no lo veo. Creo que el problema está en el tipo de dato que estoy usando en la función potencia. probé con int y a partir de la potencia 14 me la calcula mal!. Puse double y directamente me calcula todo mal y ahora pruebo con long int y tengo el mismo problema que con int.
Si alguien lo puede ver se los dejo!
Código:
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

double exponencial(int,double);
int factorial(int);
long int potencia(int,int);
int vector(int[]);

void main(void)
{
    int num;
    double tol;
    printf("Ingrese un numero entero: ");
    scanf("%d",&num);
    printf("Ingrese la tolerancia: ");
    scanf("%lf",&tol);
    printf("e elevado a %d es: %ld \n", num, exponencial(num,tol));
}
///////////////////////////////////////////////////
int factorial(int num)
{
    int f=1,i;
    for(i=1;i<=num;i++)
       f*=i;
    return f;
}
////////////////////////////////////////////////////
long int potencia(int x, int y)
{
  int i;
  long int pot=1;
  for(i=0;i<y;i++)
        pot*=x;
  printf("%ld elevado a %d es:  %d\n",x,y,pot);
  return pot;
}
/////////////////////////////////////////////////
double exponencial(int x, double t)
{
    double exp=0,tot;
    int i=0;
    do{
        tot=(double) potencia(x,i)/factorial(i);
        exp+=tot;
        ///printf("\n%d\t%f\n\t",i,exp);
        i++;
    }while(t<tot);
return exp;
}


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Error en ejercicio de exponencial
« Respuesta #1 en: 4 Febrero 2015, 16:43 pm »

El tipo int tiene un tamaño típico de 32 bits, de los cuales uno lo utiliza para identificar el signo del número (positivo o negativo).

El número más alto que puedes representar con un int típico es 2^31 = 2.147.483.648. Cualquier número más alto que este va a ser imposible almacenarlo en un "int". Es a partir de este punto cuando el programa empezará a funcionar raro.

Por otro lado, si yo cojo y hago:

Código
  1. int entero = 2000000000;
  2. double valor = (double)( entero * 2 );

El resultado almacenado en "valor" va a ser incorrecto porque la operación "entero * 2" se realiza con tipo "int" y después se coge ese resultado y se almacena como double.

Hay librerías que disponen de formatos para trabajar con números todo lo grandes que tu quieras, pero creo que ya es algo que se escapa al alcance de la práctica. Si tu ejercicio funciona bien mientras no se desborde el int, puedes dar tu práctica como buena.

Un saludo


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
me aparece un error en este ejercicio
Programación C/C++
terry2602 4 2,613 Último mensaje 30 Mayo 2012, 05:24 am
por durasno
Error en ejercicio de clase
Programación C/C++
foreground 3 2,959 Último mensaje 14 Octubre 2012, 17:07 pm
por bemone
[C] Error en código de ejercicio
Programación C/C++
audiogalaxy. 8 6,211 Último mensaje 29 Marzo 2013, 19:53 pm
por amchacon
Error Ejercicio JButton, no encuentro el error[Resuleto, se puede cerrar]
Java
MinW 0 1,948 Último mensaje 27 Diciembre 2013, 17:59 pm
por MinW
Funcion exponencial con desarrollo de Taylor C++
Programación C/C++
ElFontaneroGRNA 5 9,691 Último mensaje 20 Noviembre 2016, 16:45 pm
por ElFontaneroGRNA
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines