/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////// Helper functions for solver //////////// inline void baseODE45::solve_one_step( std::vector<double> &X , std::vector<double> &C , std::vector<double> &K1 , std::vector<double> &K2 , std::vector<double> &K3 , std::vector<double> &K4 ) { K1 = calcFunc(X); K2 = calcFunc(calc_K_by_h_div_2(X,K1,step_length)); K3 = calcFunc(calc_K_by_h_div_2(X,K2,step_length)); K4 = calcFunc(calc_K_by_h(X,K1,step_length)); X = calc_new_X(X, K1, K2, K3, K4, step_length); res.push_back(X); }
static void prim() { switch (currTok) { case tEnd: break; case tFunc: calcFunc(); getToken(); break; case tVar: put(MCODE_OP_PUSHVAR); putstr(nameString); getToken(); break; case tConst: put(MCODE_OP_PUSHCONST); putstr(nameString); getToken(); break; case tInt: put(MCODE_OP_PUSHINT); put64(currVar.i()); getToken(); break; case tFloat: put(MCODE_OP_PUSHFLOAT); putDouble(currVar.d()); getToken(); break; case tFARVar: put(FARVar); // nFARVar получаем в getToken() getToken(); break; case tStr: put(MCODE_OP_PUSHSTR); putstr(currVar.s()); getToken(); break; case tMinus: getToken(); prim(); put(MCODE_OP_NEGATE); break; case tBitNot: getToken(); prim(); put(MCODE_OP_BITNOT); break; case tNot: getToken(); prim(); put(MCODE_OP_NOT); break; case tLp: getToken(); expr(); if (currTok != tRp) keyMacroParseError(err_Expected_Token, L")"); getToken(); break; case tRp: //??? break; default: keyMacroParseError(err_Expr_Expected); break; } }
int calclulate(int a, int b, int (*calcFunc)(int, int)) { int result = calcFunc(a,b); return result; }