2017-04-03 3 views
1

Wir haben diese Typedef in einem Hausaufgabenprogramm. Als Programmierer noob habe ich vorher noch nie so etwas gesehen. Bedeutet das, dass DoubleFunction2D eigentlich ein 2-Tupel von (double, double) ist?Wie funktioniert typedef mit Tupeln?

Programm:

typedefs:

typedef double (*DoubleFunction) (double);  
typedef double (*DoubleFunction2D) (double, double);  
typedef double (*DoubleFunction3D) (double, double, double); 

Beispiel zur Nutzung
(. Meine WIP Lösung einer Aufgabe, die noch nicht erfüllt/geprüft nach innen):

double expf2D(double x, double y) 
{ 
    double r = sqrt(pow(x,2) + pow(y,2)); 
    return my_expf(r); 
} 

double DiskMonteCarloIntegrator(DoubleFunction2D f, double r1, double r2, int N) 
{ 
    bool is_inside_ring(double x, double y){ 
     return is_inside_ellipse(x, y, r2/2, r2/2) && !(is_inside_ellipse(x, y, r1/2, r1/2)); 
    } 
    int i=0; 
    double x, y, sum = 0; 
    while(i < N) 
    { 
     x = RandomDouble(-1*r1, r1); 
     y = RandomDouble(-1*r1, r1); 
     if(is_inside_ring(x, y)) 
     { 
      sum += f(x, y); 
      i++; 
     } 
    } 
    double avg = sum/N; 
    double integral = avg * (pow(r2, 2) - pow(r1, 2)) * M_PI; 
    return integral; 
} 

//extract 
void main(int argc, char *argv[]){ 
    DiskMonteCarloIntegrator(expf2D, 1.0, 2.0, 1000000); 
} 
+0

typedef-ed Zeiger auf Funktion – LPs

Antwort

6

Es gibt keine Tupel hier (tatsächlich gibt es keine "Tupel" in der Programmiersprache C).


typedef double (*DoubleFunction) (double);  

bedeutetDoubleFunction ein Zeiger auf eine Funktion, die eine double eine double und kehrt nimmt.


typedef double (*DoubleFunction2D) (double, double);  

bedeutetDoubleFunction2D ein Zeiger auf eine Funktion, die eine double zwei double Werte und kehrt nimmt.


typedef double (*DoubleFunction3D) (double, double, double); 

bedeutetDoubleFunction3D ein Zeiger auf eine Funktion, die eine double drei double Werte und kehrt nimmt.