( uid_6201 | 2017. 08. 25., p – 10:09 )

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;
}