#include <stdio.h>
#include <math.h>

#define I	7
#define gna	35.
#define gk	9.
#define gl	0.1
#define ena	55.
#define ek	(-90.)
#define el	(-65.)
#define dt	0.01

inline double Minf(double v);
inline double Ninf(double v);
inline double Ntau(double v);
inline double Hinf(double v);
inline double Htau(double v);

double Minf(double x){
	return 0.953881978928+x*(0.00764436291528+x*(-0.000176887049516+x*(-1.95108741101e-07+x*(1.66385198983e-08+x*(1.67105570231e-11)))));
};

double Hinf(double x){
	return -0.0310904478177+x*(0.00192650413623+x*(8.72227960325e-05+x*(-2.94688600355e-06+x*(6.87296459746e-11+x*(2.70678460466e-10)))));
}

double Ninf(double x){
	return 0.824494447868+x*(0.00719826506481+x*(-0.000110730240325+x*(-1.53119478562e-07+x*(9.39864044908e-09+x*(3.03369442673e-12)))));
}

double Htau(double x){
	return 0.162350260789+x*(-0.00768669406983+x*(0.000298711718949+x*(-8.22822927459e-07+x*(-3.45692137243e-08+x*(1.43004040707e-10)))));
}

double Ntau(double x){
	return 0.492403741388+x*(-0.012052097973+x*(0.00010471373932+x*(1.69326656183e-06+x*(-1.44449337737e-08+x*(-1.12462063995e-10)))));
}

int main(int argc, char** argv){
	int t = 0;
	double n=0, h=0, minf, ninf, hinf, ntau, htau, a, b, v=-63.;
	for(; t<60000000; ++t){
		minf = Minf(v);
		ninf = Ninf(v);
		ntau = Ntau(v);
		hinf = Hinf(v);
		htau = Htau(v);

		n += dt*(ninf - n)/ntau;
		h += dt*(hinf - h)/htau;
		v += dt*(-gna*minf*minf*minf*h*(v-ena)-gk*n*n*n*n*(v-ek)-gl*(v-el)+I);
		//printf("%g %g\n",dt*t,v);

	}
	return 0;
}