j'ai vu sur ce site quelqu'un qui avais fait sa donc j'ai eu envie de tester.
je trouve l'optimisation pas mal :p
pour le compiler avec gcc utilisiser gcc fibo.c -o fibo... -O3
pour le lancer, c'est en console si vous l'executer sans parametre vous aurez l'aide
tout est dit dans la capture
Source / Exemple :
//###################################################################
//# #
//# fichier : fibo.c version : V1.1 #
//# projet : fibo date : 04/07/2004 #
//# par : aerith et Thaeron #
//# #
//# calcule de grand nombre avec la suite de fibonaci #
//# #
//###################################################################
#include <stdio.h>
#include <time.h> //clock()
#include <stdlib.h> //malloc()
long atol(const char *nbr)
{
unsigned long total = 0;
while (*nbr)
total = 10 * total + (*nbr++ - '0');
return total;
}
int main(int argc, char* argv[])
{
FILE *Fichier;
unsigned long Iteration, Taille, i = 1, Pos, Somme, Retenue = 0;
unsigned long *Nombre1, *Nombre2, *Cur1, *Cur2;
char *Data;
clock_t Temp = clock();
if(argc >= 2)
{
Iteration = atol(argv[1]);
Taille = atol(argv[2]);
}
else
{
printf("\nCalcul de la suite de fibonacci avec support des grands nombres\n");
printf("Par aerith et Thaeron\tVersion 1.1\n\n");
printf("Syntax : fibo <Iteration> <Buffer>\n");
printf(" <Iteration>\t : Nombre d'iteration dans la suite\n");
printf(" <Buffer>\t : Taille du buffer stockant le nombre\n\n");
printf("Cree un fichier fibo.txt\n");
return 0;
}
Nombre1 = malloc(Taille * 8);
Nombre2 = malloc(Taille * 8);
Fichier = fopen("fibo.txt", "w");
for(Pos = 0; Pos < Taille; Nombre1[Pos] = Nombre2[Pos++] = 0);
// iteration dans la suite
do
{
// addition de grand nombre
Pos = 0;
Cur1 = Nombre1;
Cur2 = Nombre2;
do
{
Pos++;
// addition de nombres a 9 chiffre
Somme = Retenue + *Cur1 + *Cur2;
Retenue = 0;
if(Somme >= 1000000000) // si resulatat a 10 chiffre
{
Somme -= 1000000000; // on retire le 10eme et pose la retenue
Retenue = 1;
}
}
while((Pos < Taille) && *(Cur2++));
// procedure de verification de debordement buffer
if((Pos == Taille) && Retenue)
{
printf("Buffer overflow, iteration %i\nExecuter en %i ms \n", i, clock() - Temp);
return -1;
}
}
while(++i < Iteration);
fprintf(Fichier,"Nombre case : %i\n", Pos);
printf( "Nombre case : %i\n", Pos);
// sauvegarde le dernier nombre dans un fichier
Data = malloc(Pos*10+1)+(Pos*10+1);
do
{
// conversion de unsigned long en char, ecrit de droite a gauche
for(i = 0; i < 9; i++)
{
- Data-- = (char)((*Nombre2 % 10) + '0');
- Nombre2 /= 10;
}
Nombre2++;
}
while(--Pos > 0);
fprintf(Fichier,"Iteration : %i\n%s\nExecuter en %i ms\n", Iteration, Data, clock() - Temp);
printf( "Iteration : %i\n%s\nExecuter en %i ms\n", Iteration, Data, clock() - Temp);
free(Data);
free(Nombre1);
free(Nombre2);
fclose(Fichier);
return 1;
}
Conclusion :
Thaeron ma orienter vers les pointeur pour l'additionneur =)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.