I have 3 files:
- main.cpp
- matlib.cpp
- matlib.h
As far as i know, i should declare the functions in matlib.h and define them in matlib.cppIn main.cpp i include the header file matlib.h and am able to use the functions defined in matlib.cpp.
The codes are presented next:
MATLIB.H
const double PI = 3.14159265358979;double normcdf( double x );double norminv( double x );
MATLIB.CPP
#include <cmath>#include <iostream>#include "matlib.h"double hornerFunction( double x, double a0, double a1) { return a0 + x*a1;}double hornerFunction( double x, double a0, double a1, double a2) { return a0 + x*hornerFunction( x, a1, a2);}double hornerFunction( double x, double a0, double a1, double a2, double a3) { return a0 + x*hornerFunction( x, a1, a2, a3);}double hornerFunction( double x, double a0, double a1, double a2, double a3, double a4) { return a0 + x*hornerFunction( x, a1, a2, a3, a4);}double hornerFunction( double x, double a0, double a1, double a2, double a3, double a4, double a5) { return a0 + x*hornerFunction( x, a1, a2, a3, a4, a5);}double hornerFunction( double x, double a0, double a1, double a2, double a3, double a4, double a5, double a6) { return a0 + x*hornerFunction( x, a1, a2, a3, a4, a5, a6);}double hornerFunction( double x, double a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7) { return a0 + x*hornerFunction( x, a1, a2, a3, a4, a5, a6, a7);}double hornerFunction( double x, double a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, double a8) { return a0 + x*hornerFunction( x, a1, a2, a3, a4, a5, a6, a7, a8);}/* * Computes the cumulative * distribution function of the * normal distribution */double K2 = (1/sqrt(2*PI));double normcdf(double x) { double k = 1/(1+0.2316419*x); double a0=0.319381530; double a1=-0.356563782; double a2=1.781477937; double a3=-1.821255978; double a4=1.330274429; double N = (1-(K2*exp(-x*x/2))*k*hornerFunction(k,a0,a1,a2,a3,a4)); if (x>0) { return N; } else { return 1-normcdf(-x); }}/* * Computes the inverse of normcdf */double norminv(double x) { const double a0 = 2.50662823884; const double a1 = -18.61500062529; const double a2 = 41.39119773534; const double a3 = -25.44106049637; const double b1 = -8.47351093090; const double b2 = 23.08336743743; const double b3 = -21.06224101826; const double b4 = 3.13082909833; const double c0 = 0.3374754822726147; const double c1 = 0.9761690190917186; const double c2 = 0.1607979714918209; const double c3 = 0.0276438810333863; const double c4 = 0.0038405729373609; const double c5 = 0.0003951896511919; const double c6 = 0.0000321767881768; const double c7 = 0.0000002888167364; const double c8= 0.0000003960315187; double y = x - 0.5; if (abs(y)<0.42) { double r = pow(y, 2); std::cout<<"R is: "<<r<<std::endl; return y*hornerFunction(r,a0,a1,a2,a3)/hornerFunction(r,1,b1,b2,b3,b4); } else { double r = 1-x; double s = log(-log(r)); if (x > 0.5) { return hornerFunction(s,c1,c2,c3,c4,c5,c6,c7,c8); } else { return -hornerFunction(s,c1,c2,c3,c4,c5,c6,c7,c8); } }}
MAIN.CPP
#include "matlib.h"#include <iostream>using namespace std;int main() { cout << "normcdf(1.96)=" << normcdf(1.96) << "\n"; cout << "norminv(0.975)=" << norminv(0.975) << "\n"; cout<<"Oi"<<endl; return 0;}
I tried running the following code in the console for compiling:
g++ main.cpp matlib.cpp -o main
But even trying to compile the files together it doesn't raise any error but it doesn't print the values from the main.cpp
Do anyone know what to do in order to obtain the values returned from the functions in the console?