Que poco sueño que tengo. Estoy tan aburrido que me he dedicado a comprobar el número entero más alto que se puede alcanzar con 64 bits según la sucesión de nuestro hamijo Leonardo Pisano Bigollo, más conocido como Leonardo Fibonacci.
La sucesión se define matemáticamente así:
Por lo que los primeros elementos serán...
Ajá! Bonito todo, ¿no? Veamos una manera de comprobar el número más alto de la sucesión con 64 bits.
var
current,old:Int64;
fibonacci:array [1..2] of Int64;
c:Byte;
begin
fibonacci[1]:=0; // F0
fibonacci[2]:=1; // F1
old:=0;
current:=1; // Controladores de overflow
c:=1; // Switch de posición en array
while (current>old) do begin
WriteLn(Current);
old:=fibonacci[c];
fibonacci[c]:=fibonacci[1]+fibonacci[2];
current:=fibonacci[c];
if c=1 then c:=2 else c:=1;
end;
current,old:Int64;
fibonacci:array [1..2] of Int64;
c:Byte;
begin
fibonacci[1]:=0; // F0
fibonacci[2]:=1; // F1
old:=0;
current:=1; // Controladores de overflow
c:=1; // Switch de posición en array
while (current>old) do begin
WriteLn(Current);
old:=fibonacci[c];
fibonacci[c]:=fibonacci[1]+fibonacci[2];
current:=fibonacci[c];
if c=1 then c:=2 else c:=1;
end;
ReadLn;
end.
Y ese es un ejemplo de algoritmo para comprobar el número más alto de fibonacci, el resto dependerá de la aritmética, en este caso con una precisión entera de 64 bits (realmente ni siquiera es una precisión de 64 bits, pues uno es de signo (aunque usáramos un unsigned integer 64 no llegaríamos a más)). Se basa en el uso del desbordamiento aritmético (overflow) es decir, una vez llegado al número más alto, por ejemplo el 0111(base 2), si incrementamos tenemos 1111(base2), es decir, pasamos a un número negativo (pues el último es de signo), por lo que hemos llegado al límite. No soy precisamente un genio explicando, lo siento :D
Y aquí los resultados obtenidos :3
Salu2.
No hay comentarios:
Publicar un comentario