Exemple #1
0
unsigned int fibonacci_c(unsigned int n)
{
    if ( n < 2 )
        return 1;
    else
        return ( fibonacci_c(n-1) + fibonacci_c(n-2) );
}
Exemple #2
0
int	main()
{
	clock_t start_t, end_t;											// Timervariablen definieren
	double total_t;

	int i;															// Einige Variablen definieren
	unsigned int	iN = 50;
	long int	iF1 = 0,iF2 = 1;
	long int	iRet = 0,iRet_a = 0;

	if(iN != -1)														// Abfragen, ob die Länge der Fibonaccirekursion größer als 0 ist
	{																	// wenn ja, dann ...
		iRet = fibonacci_c(iF1,iF2,iN);									// C Funktion anspringen um die Fibonaccizahl zu berechnen
		iRet_a = fibonacci(iF1,iF2,iN);									// Assemblerroutine anspringen um die Fibonaccizahl zu berechnen

		printf("Die Fibonaccizahl von %lu und %lu mit %u Schritten ist %lu (%lu).\n",iF1,iF2,iN,iRet,iRet_a);		// Ausgabe der Fibonaccizahl

		printf("Benchmark\n");
		printf("=========\n");
		start_t = clock();												// ersten Timer nehmen
		for(i = 0;i < BENCHMARK_NUM;i++) iRet = fibonacci_c(iF1,iF2,iN);// Benchmark mit der C Funktion durchführen
		end_t = clock();												// zweite Zeit nehmen
		total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;			// Differenz der Zeiten berechnen
		printf("CPU-Zeit: %f, Fibonacci-Berechnung in C\n", total_t);	// Ausgabe

		double o;
		start_t = clock();												// Das Selbe nochmal für die Assemblerroutine
		for(i = 0;i < BENCHMARK_NUM;i++) iRet = fibonacci(iF1,iF2,iN);
		end_t = clock();
		o = total_t;													// Kurz noch die Zeit der C Funktion zwischenspeichern
		total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
		printf("CPU-Zeit: %f, Fibonacci-Berechnung in Assembler\n", total_t);
		printf("Das Assemblerprogramm ist %f mal schneller, als das C Programm\n",o/total_t);	// und noch den Geschwindigkeitsfaktor ausgeben
	}
	else
		printf("Fehlerhafte Durchgangsanzahl.\n");						// ein Fehler ist aufgetreten.

	return 0;
}
Exemple #3
0
void test_fibonacci()
{
    unsigned n = 30;
    unsigned i;
    int err = 0;
    for (i=0;  i < n;  i++) {
        if ( fibonacci(i) != fibonacci_c(i) ) {
            err = 1;
            printf(ANSI_COLOR_RED "Test failed. Fibonacci(%d): expected %d, got %d\n" ANSI_COLOR_RESET, i, fibonacci_c(i), fibonacci(i));
        }
    }

    num_of_tests++;
    if (!err) {
        printf(ANSI_COLOR_GREEN "Test passed.\n" ANSI_COLOR_RESET );
        num_of_tests_passed++;
    }
}