Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Serie de fibonacci

Estas en el tema de Serie de fibonacci en el foro de C/C++ en Foros del Web. Calcular los 100 primeros números de la sucesión de Fibonacci. *Solo funciona hasta el numero entre llaves, cual puede ser el error? 1 1 2 ...
  #1 (permalink)  
Antiguo 20/06/2012, 09:45
 
Fecha de Ingreso: junio-2012
Mensajes: 1
Antigüedad: 11 años, 10 meses
Puntos: 1
Serie de fibonacci

Calcular los 100 primeros números de la sucesión de Fibonacci.

*Solo funciona hasta el numero entre llaves, cual puede ser el error?
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
{{{{ 2971215073 }}}}
4807526976
7778742049
12586269025
20365011074
32951280099
53316291173
86267571272
139583862445
225851433717
365435296162
591286729879
956722026041
1548008755920
2504730781961
4052739537881
6557470319842
10610209857723
17167680177565
27777890035288
44945570212853
72723460248141
117669030460994
190392490709135
308061521170129
498454011879264
806515533049393
1304969544928660
2111485077978050
3416454622906710
5527939700884760
8944394323791460
14472334024676200
23416728348467700
37889062373143900
61305790721611600
99194853094755500
160500643816367000
259695496911123000
420196140727490000
679891637638612000
1100087778366100000
1779979416004710000
2880067194370820000
4660046610375530000
7540113804746350000
12200160415121900000
19740274219868200000
31940434634990100000
51680708854858300000
83621143489848400000
135301852344707000000
218922995834555000000

________________________CODIGO EN C++________________________

#include <stdio.h>
#include <conio.h>

unsigned long long int funfib (unsigned long long int a, unsigned long long int b);
unsigned long long int funn1 (unsigned long long int a);
unsigned long long int funn2 (unsigned long long int a);
unsigned long long int result,nro1=1,nro2=0,nrof;
int i;
void main()
{
clrscr();

printf("%llu",nro1);
for (i=1;i<=92;i++)
{
nrof=funfib(nro1,nro2);
printf("- %llu ",nrof);
nro2=funn2(nro1);
nro1=funn1(nrof);
}

getch();
}

unsigned long long int funfib (unsigned long long int a, unsigned long long int b)
{
unsigned long long int result;
result=a+b;

return (result);
}
unsigned long long int funn2 (unsigned long long int a)
{
unsigned long long int result;
result=a;
return (result);
}
unsigned long long int funn1 (unsigned long long int a)
{
unsigned long long int result;
result=a;
return (result);
}

__________________________________________________ ______
  #2 (permalink)  
Antiguo 21/06/2012, 02:36
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Serie de fibonacci

Parece como si te estuviera tomando el tipo unsigned long long int (64 bits) como unsigned long int (32 bits), con el tipo unsigned long int puedes alcanzar hasta el término 47 de la sucesión (el que tienes marcado), a partir de ahí tienes desbordamiento y tendrás valores no válidos (incluso negativos, si utilizases tipos con signo).

Comprueba el tamaño del tipo unsigned long long int, te lo digo porque (aunque no indicas compilador ni sistema operativo que usas) hay algún compilador que acepta el tipo long long int pero realmente te lo toma como long int, y alguno hay que no reconoce el tipo unsigned long long int pero sí el long long int.

Por cierto, que con el tipo unsigned long long int puedes llegar hasta el término 93 de la sucesión (a partir de ahí vuelves a tener desbordamiento). Veo también que a partir del término 74 los valores son incorrectos, supongo que los has calculado empleando tipos double, que tienen 15-16 dígitos de precisión y a partir de ahí, aunque les pidas más cifras decimales, te van a presentar ceros.

Si necesitas más precisión, tendrás que buscar alguna librería de precisión arbitraria. También hay compiladores que admiten un tipo int128.

Saludos,
  #3 (permalink)  
Antiguo 22/06/2012, 08:14
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Serie de fibonacci

prueba usar este algoritmo con long long si no te funciona porque se te van de rango por su dimension busca la clase BigInt que deebe estar en cualquier sitio de Internet con ella si se debe poder

long long fibo[101];

fibo[0]=0;
fibo[1]=1;

for (int i =2; i < 101; i++ )
fib[i] = fibo[i-1] + fibo[i-2];

s2
crono

Etiquetas: c++
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:27.