2015-12-17 2 views
1

Je viens d'écrire le code pour une calculatrice gmp. L'addition et la multiplication fonctionnent impeccablement, mais en ce qui concerne l'exponentiation, elle arrête ou imprime un nombre infini de zéros. Comment utiliser la fonction d'alimentation gmp pour le faire fonctionner?Une calculatrice GMP est coincé avec des pouvoirs

gmptest.c

#include <stdio.h>   
#include <gmp.h> 

int main(int argc, char *argv[]) 
{ 
    mpf_t x1; 
    mpf_t x2; 
    mpf_t result; 
    char operation; 
    char x_1[20]; 
    char x_2[20]; 
    printf("Choose between *,+ and ^\n"); 
    scanf("%c\n", &operation); 

    fgets(x_1, sizeof(x_1), stdin); 
    fgets(x_2, sizeof(x_2), stdin); 

    mpf_init(x1); 
    mpf_init(x2); 
    mpf_init(result); 
    mpf_set_str(x1, x_1, 10); 
    mpf_set_str(x2, x_2, 10); 

    switch(operation) { 
    case '+': 
     mpf_add(result, x1, x2); 
     break; 
    case '^': 
     mpf_pow_ui(result, x1, x2); 
     break; 
    case '*': 
     mpf_mul(result, x1, x2); 
     break; 
    default: 
     printf("Error! operator is not correct"); 
     break; 
    } 

    gmp_printf("%0.20Ff", x1); 
    printf(" %c ", operation); 
    gmp_printf("%0.20Ff", x2); 
    gmp_printf(" = %0.20Ff\n\n", result); 

    return 0; 
} 
+3

Activez les avertissements du compilateur et faites attention à eux. Lisez également la documentation des fonctions que vous utilisez. Que signifie _ui dans le nom de votre fonction? –

Répondre

1

La signature de mpf_pow_ui() est

void mpf_pow_ui (mpf_t rop, const mpf_t op1, unsigned long int op2) 

Si vous voulez un exposant à virgule flottante, utilisez la bibliothèque MPFR, qui travaille au-dessus de GMP.