GMP pow function



  • Hallo,

    ich wüsste gern ob und wenn ja wie es möglich ist eine float zahl hoch eine floatzahl zu nehmen ich habe dazu keine function gefunden.
    Wie kann ich dies realisieren?

    Dies ist für meine rechnung existenziell.

    Mfg Julian Hille



  • #include <iostream>
    #include <math.h>
    
    int main(int argc, char *argv[])
    {
        float DieseZahl = 2.123f;
        float HochDieseZahl = 1.234f;
        std::cout << pow(DieseZahl,HochDieseZahl) << std::endl;
        return EXIT_SUCCESS;
    }
    


  • ja dies funktioniert aber leider nicht mit der GMP library.. da ich auf ca. 90 stellen genau brauche, und dies ein herkömmliches float nicht hergibt ;/

    Weiterhin habe ich das problem bei der GMP lib,
    das er zwei zahlen nicht richtig addiert sondern rundet.
    Habe es probiert er addiert 0,64...e64 + 0,4243e-196 nicht richtig, obwohl ich die precision auf 900,5000 oder sogar 50000 erhöht habe, was mache ich falsch?

    int aprox;
      mp_size_t  prec = 50000;
    
    	mpf_t  test, y,t,te1,ttest, te2,tfac,e1,e2,fac;
    
          mpf_init2 (test, prec);
    	  mpf_init2 (y, prec);
    	  mpf_init2 (e1, prec);
    	  mpf_init2 (e2, prec);
    	  mpf_init2 (fac, prec);
    	  mpf_init2 (tfac, prec);
    	  mpf_init2 (ttest, prec);
    	  mpf_init2 (te1, prec);
    	  mpf_init2 (t, prec);
    	  mpf_init_set_si(te1,0);
    
    		mpf_init_set_d (test,4.16411519559);
    
    		mpf_init_set_si (te1,1);
    
    		mpf_init_set_d (t, 1e-84);
    
    while(mpf_cmp_d(test,4.165)<0)
    {
    
    mpf_init_set_si (fac,1);
    mpf_init_set_si (te1,1);
    mpf_init_set_si (e1,1);
    
    	for(aprox=1;aprox<=150;aprox++) // diese schleife approximiert die e-function aus deren summenformel
    	{
    
    		mpf_mul_ui(fac,fac,aprox);
    
    		mpf_pow_ui(ttest,test,aprox);
    
    		mpf_ui_div(tfac,1,fac);
    
    		mpf_mul(te1,tfac,ttest);
    
    		mpf_add(e1,e1,te1); //<<< es passiert genau hier, es sind alle zahlen ok aber wenn ich sie zusammenaddiere passiert reingarnix?!
    		cout << "e1:";	mpf_out_str (stdout, 10,300, e1);cout << endl;
    	}
    
    }
    

Anmelden zum Antworten