GMP a barátunk. A C-beli (processzorbeli) aritmetika helyett szoftveresen összerakott aritmetikával dolgozik.
Ellenben ezzel a teszttel eljutunk oda, hogy nem az adott nyelven megírt algoritmus futását teszteljük, hanem azt nézzük, mely programnyelv miként használja fel ugyanazt a C-ben megírt libgmp-t.
#include <gmp.h>
#include <time.h>
#include <stdio.h>
mpz_t *f(int n) {
static mpz_t fibo;
mpz_t p1, p2;
mpz_init_set_ui(p1, 1);
mpz_init(p2);
for (int i = 1; i < n; i++) {
mpz_add(fibo, p2, p1);
mpz_add_ui(p2, p1, 0);
mpz_add_ui(p1, fibo, 0);
}
mpz_clear(p1);
mpz_clear(p2);
return &fibo;
}
int main() {
struct timespec gstart, gend;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &gstart);
mpz_t *res = f(40);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &gend);
mpz_out_str(stdout, 10, res); puts("");
double eltime = (gend.tv_sec - gstart.tv_sec) + (gend.tv_nsec - gstart.tv_nsec)/1000./1000./1000.;
printf("ido: %f mp\n", eltime);
return 0;
}