2017-04-03 1 views
1

우리는 숙제 프로그램에서이 typedef를 얻었다. 프로그래머의 멍청한 놈처럼, 나는 전에 이런 것을 보지 못했다. DoubleFunction2D가 실제로 (double, double)의 2-tuple이라는 것을 의미합니까?튜플과 함께 typedef는 어떻게 작동합니까?

프로그램 :

형식 정의 :

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

사용 예제
(. 작업에 내 WIP 솔루션은 아직 준수하지/테스트 내부) :

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 포인터 – LPs

답변

6

있습니다 없음 튜플은 여기 입니다 (사실 C 프로그래밍 언어에는 "튜플"이 없습니다).

typedef double (*DoubleFunction) (double);  


DoubleFunctiondouble을 취해 double를 반환하는 함수의 포인터를 의미한다.
typedef double (*DoubleFunction2D) (double, double);  


DoubleFunction2Ddouble 값을 취하고 double를 반환하는 함수의 포인터를 의미한다.
typedef double (*DoubleFunction3D) (double, double, double); 


DoubleFunction3D는 세 double 값을 취하고 double를 반환하는 함수의 포인터를 의미한다.

관련 문제