# Retaining the form of a function and reusing it without calling again

In the code given below, I have two functions fnc1, which is a parameter dependent function, and fnc2, which is independent of any parameters. A third function fnc12 uses this two function to do some mathematical operation. The problem is that: I want the form of function fnc2 to be retained in memory since it is parameter independent so that I need not call it again and again for different parameters of fnc1.

``````///////////////////code
#include <iostream>
#include "TROOT.h"
#include "TSystem.h"
#include "TMath.h"
#include "TF1.h"
using namespace std;

TF1 *f1, *f2, *f3, *fn23;

Double_t fnc1(Double_t *x,Double_t *par){

return par*x;
}

Double_t fnc2(Double_t *x,Double_t *par){

Double_t pp=4*pow(x,3);

return pp;
}

Double_t fnc3(Double_t *x,Double_t *par){
Double_t pp=f2->Derivative(x);
return pp;
}

Double_t fnc12(Double_t *x,Double_t *par){

return f1->Eval(x) * f2->Derivative(x);

}

void t3(){

f1 = new TF1 ("fn2",fnc1,0,10,2);
f2 = new TF1 ("fn2",fnc2,0,10,0);

fn12 = new TF1("fn12", fnc12, 0, 10., 0.);

string sss;
sss = f2->GetExpFormula( "p" );//not working

cout<<"sss = "<<sss<<endl;

for(int i=0;i<10;i++){
f1->SetParameters(i*1.,0);

Double_t result=fn12->Integral(0,1);
cout<<"i = "<<i<<" result = "<<result<<endl;

}
}

//////////////////
``````

Try:

``````#include <limits>

Double_t fnc12(Double_t *x, Double_t */*par*/) {
static double X = std::numeric_limits<double>::quiet_NaN(); // quiet_NaN() or max()
static double V = 0.;
if (X != x) {
X = x;
V = f2->Derivative(X);
}
return (V * f1->Eval(X));
}
``````