#ifndef BLACK76 #define BLACK76 #ifdef WIN32 #include #endif #include #include #include #ifdef WIN32 typedef long long int64; typedef unsigned long long uint64; #endif using namespace std; static const float a1f = 0.31938153 ; static const float a2f = -0.356563782; static const float a3f = 1.781477937; static const float a4f = -1.821255978; static const float a5f = 1.330274429; static const float aNeededf = 0.3989423; static const float kNeededf = 0.2316419; static const float PIf = 3.14159265358979323846; static const double a1d = 0.31938153 ; static const double a2d = -0.356563782; static const double a3d = 1.781477937; static const double a4d = -1.821255978; static const double a5d = 1.330274429; static const double aNeededd = 0.3989423; static const double kNeededd = 0.2316419; static const double PId = 3.14159265358979323846; class Black76 { public: void runFloat(int numPasses); void runDouble(int numPasses); private: float compute_Black76_float(char CallPutFlag, float S, float X, float T, float r, float v); double compute_Black76_double(char CallPutFlag, double S, double X, double T, double r, double v); static float compute_CND_float(float X); static double compute_CND_double(double X); #ifndef WIN32 static timespec diff(timespec start, timespec end); #else static int64 GetTimeMs64(); #endif }; #endif //BLACK76