#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 na(double v);
inline double nb(double v);
inline double ha(double v);
inline double hb(double v);
double Minf(double v){
double a = 0.1*(v+35.)/(1.0-exp(-(v+35.)/10.)) ;
double b = 4.0*exp(-(v+60.)/18.);
return a/(a+b);
};
double ha(double v) { return 0.07*exp(-(v+58.)/20.); };
double hb(double v) { return 1.0/(1.0+exp(-(v+28.)/10.)); };
double na(double v) { return 0.01*(v+34.)/(1.0-exp(-(v+34.)/10.)); };
double nb(double v) { return 0.125*exp(-(v+44.)/80.); };
*/
static double tbl[201][6]={
{-90.,0.00106457,0.994192,0.573497,0.00926988,0.891982},
{-89.275,0.00117619,0.993531,0.594272,0.00992365,0.899508},
{-88.55,0.00129929,0.992794,0.615753,0.0106214,0.907057},
{-87.825,0.00143503,0.991974,0.637956,0.011366,0.914626},
{-87.1,0.00158467,0.991062,0.660898,0.0121603,0.922211},
{-86.375,0.0017496,0.990047,0.684593,0.0130072,0.929809},
{-85.65,0.00193134,0.988919,0.709056,0.0139101,0.937415},
{-84.925,0.00213156,0.987664,0.734298,0.0148722,0.945026},
{-84.2,0.00235207,0.98627,0.76033,0.0158972,0.952637},
{-83.475,0.00259487,0.984721,0.787159,0.0169887,0.960243},
{-82.75,0.00286215,0.983,0.814791,0.0181506,0.96784},
{-82.025,0.00315629,0.98109,0.843227,0.019387,0.975421},
{-81.3,0.00347989,0.97897,0.872466,0.0207021,0.982981},
{-80.575,0.00383581,0.976619,0.9025,0.0221003,0.990513},
{-79.85,0.00422714,0.974013,0.933319,0.0235863,0.998012},
{-79.125,0.00465729,0.971125,0.964903,0.0251648,1.00547},
{-78.4,0.00512993,0.967929,0.997229,0.0268408,1.01288},
{-77.675,0.0056491,0.964392,1.03026,0.0286196,1.02023},
{-76.95,0.00621916,0.960483,1.06397,0.0305064,1.02752},
{-76.225,0.00684487,0.956165,1.09828,0.0325068,1.03473},
{-75.5,0.00753141,0.951402,1.13315,0.0346265,1.04187},
{-74.775,0.00828438,0.946153,1.1685,0.0368714,1.04891},
{-74.05,0.00910987,0.940374,1.20424,0.0392474,1.05584},
{-73.325,0.0100144,0.934022,1.24026,0.0417607,1.06267},
{-72.6,0.0110053,0.92705,1.27644,0.0444177,1.06937},
{-71.875,0.01209,0.919409,1.31265,0.0472247,1.07593},
{-71.15,0.0132769,0.91105,1.34873,0.0501882,1.08235},
{-70.425,0.0145751,0.901921,1.38451,0.0533149,1.08861},
{-69.7,0.015994,0.891975,1.41978,0.0566114,1.0947},
{-68.975,0.0175441,0.881161,1.45435,0.0600843,1.1006},
{-68.25,0.0192365,0.869432,1.48796,0.0637403,1.10629},
{-67.525,0.021083,0.856745,1.52038,0.067586,1.11178},
{-66.8,0.0230963,0.843061,1.55132,0.0716281,1.11704},
{-66.075,0.02529,0.828346,1.58051,0.0758729,1.12205},
{-65.35,0.0276783,0.812575,1.60765,0.0803268,1.12681},
{-64.625,0.0302767,0.795733,1.63245,0.084996,1.1313},
{-63.9,0.0331012,0.777813,1.65459,0.0898863,1.13549},
{-63.175,0.0361688,0.758822,1.67378,0.0950034,1.13939},
{-62.45,0.0394975,0.738782,1.68973,0.100353,1.14297},
{-61.725,0.0431059,0.717728,1.70218,0.105939,1.14621},
{-61,0.0470137,0.695712,1.71087,0.111767,1.1491},
{-60.275,0.0512411,0.672801,1.71561,0.11784,1.15164},
{-59.55,0.055809,0.649079,1.71622,0.124162,1.15379},
{-58.825,0.0607392,0.624646,1.71258,0.130737,1.15556},
{-58.1,0.0660537,0.599614,1.70464,0.137565,1.15692},
{-57.375,0.0717748,0.574108,1.69238,0.14465,1.15786},
{-56.65,0.0779251,0.548264,1.67586,0.151991,1.15837},
{-55.925,0.0845273,0.522224,1.65519,0.159589,1.15844},
{-55.2,0.0916035,0.496134,1.63054,0.167443,1.15806},
{-54.475,0.0991757,0.470141,1.60216,0.175551,1.15723},
{-53.75,0.107265,0.444389,1.5703,0.183912,1.15592},
{-53.025,0.115891,0.419017,1.5353,0.192521,1.15414},
{-52.3,0.125072,0.394154,1.49752,0.201374,1.15188},
{-51.575,0.134826,0.369918,1.45732,0.210465,1.14913},
{-50.85,0.145166,0.346414,1.4151,0.21979,1.1459},
{-50.125,0.156105,0.323733,1.37127,0.22934,1.14217},
{-49.4,0.167652,0.30195,1.32622,0.239108,1.13796},
{-48.675,0.179813,0.281124,1.28032,0.249084,1.13327},
{-47.95,0.192589,0.261298,1.23396,0.259258,1.12809},
{-47.225,0.205979,0.2425,1.18746,0.269621,1.12243},
{-46.5,0.219976,0.224745,1.14115,0.28016,1.11631},
{-45.775,0.23457,0.208035,1.0953,0.290862,1.10972},
{-45.05,0.249745,0.19236,1.05016,0.301717,1.10269},
{-44.325,0.265479,0.177702,1.00594,0.312709,1.09521},
{-43.6,0.281747,0.164032,0.962838,0.323824,1.0873},
{-42.875,0.298518,0.151318,0.920993,0.335049,1.07899},
{-42.15,0.315757,0.139519,0.880528,0.346368,1.07028},
{-41.425,0.333424,0.128593,0.841535,0.357766,1.06119},
{-40.7,0.351472,0.118496,0.804082,0.369228,1.05174},
{-39.975,0.369856,0.10918,0.768213,0.380739,1.04194},
{-39.25,0.388521,0.100597,0.733952,0.392283,1.03183},
{-38.525,0.407415,0.0927005,0.701307,0.403844,1.02141},
{-37.8,0.42648,0.0854438,0.67027,0.415408,1.01072},
{-37.075,0.445659,0.0787816,0.640822,0.426959,0.999768},
{-36.35,0.464892,0.0726701,0.612931,0.438484,0.98858},
{-35.625,0.48412,0.0670676,0.586559,0.449966,0.977179},
{-34.9,0.503286,0.0619344,0.56166,0.461394,0.965588},
{-34.175,0.522334,0.057233,0.538185,0.472754,0.953829},
{-33.45,0.541208,0.0529284,0.51608,0.484032,0.941923},
{-32.725,0.559856,0.0489875,0.495287,0.495217,0.929894},
{-32,0.578231,0.0453799,0.475749,0.506297,0.917761},
{-31.275,0.596286,0.042077,0.457407,0.517262,0.905547},
{-30.55,0.613981,0.0390527,0.440203,0.528102,0.893272},
{-29.825,0.63128,0.0362828,0.424077,0.538807,0.880956},
{-29.1,0.648148,0.0337448,0.408973,0.549369,0.868617},
{-28.375,0.664559,0.0314185,0.394835,0.55978,0.856274},
{-27.65,0.680489,0.0292849,0.381609,0.570033,0.843944},
{-26.925,0.695918,0.0273271,0.369242,0.580122,0.831645},
{-26.2,0.710831,0.0255293,0.357683,0.590041,0.819391},
{-25.475,0.725217,0.0238772,0.346886,0.599785,0.807198},
{-24.75,0.73907,0.0223578,0.336803,0.60935,0.795078},
{-24.025,0.752385,0.0209593,0.327391,0.618733,0.783046},
{-23.3,0.765162,0.0196708,0.318607,0.627931,0.771112},
{-22.575,0.777405,0.0184827,0.310413,0.636941,0.759289},
{-21.85,0.789117,0.0173858,0.302771,0.645762,0.747585},
{-21.125,0.800307,0.0163723,0.295645,0.654393,0.73601},
{-20.4,0.810984,0.0154346,0.289003,0.662833,0.724573},
{-19.675,0.82116,0.0145663,0.282812,0.671082,0.71328},
{-18.95,0.830847,0.0137612,0.277043,0.679141,0.702139},
{-18.225,0.84006,0.0130138,0.271668,0.687009,0.691155},
{-17.5,0.848813,0.0123192,0.266662,0.69469,0.680333},
{-16.775,0.857122,0.0116729,0.261999,0.702183,0.669677},
{-16.05,0.865003,0.0110707,0.257656,0.709491,0.659192},
{-15.325,0.872474,0.0105091,0.253613,0.716615,0.64888},
{-14.6,0.87955,0.00998452,0.249849,0.723559,0.638743},
{-13.875,0.886248,0.00949403,0.246346,0.730324,0.628783},
{-13.15,0.892585,0.00903482,0.243084,0.736914,0.619003},
{-12.425,0.898577,0.00860438,0.240049,0.743331,0.609402},
{-11.7,0.904242,0.00820042,0.237224,0.749579,0.59998},
{-10.975,0.909593,0.00782086,0.234596,0.755661,0.590739},
{-10.25,0.914648,0.00746381,0.232151,0.761579,0.581677},
{-9.525,0.91942,0.00712755,0.229876,0.767339,0.572794},
{-8.8,0.923925,0.00681052,0.22776,0.772942,0.564088},
{-8.075,0.928177,0.00651129,0.225791,0.778392,0.555559},
{-7.35,0.932188,0.00622856,0.22396,0.783694,0.547204},
{-6.625,0.935972,0.00596114,0.222257,0.788851,0.539022},
{-5.9,0.939541,0.00570796,0.220673,0.793865,0.531011},
{-5.175,0.942908,0.00546801,0.219201,0.798742,0.523169},
{-4.45,0.946082,0.0052404,0.217831,0.803484,0.515492},
{-3.725,0.949076,0.0050243,0.216558,0.808095,0.507979},
{-3,0.951898,0.00481894,0.215374,0.812579,0.500628},
{-2.275,0.95456,0.00462364,0.214274,0.816938,0.493434},
{-1.55,0.957069,0.00443774,0.213251,0.821177,0.486396},
{-0.825,0.959436,0.00426067,0.2123,0.825299,0.47951},
{-0.1,0.961667,0.00409188,0.211416,0.829307,0.472774},
{0.625,0.963771,0.00393087,0.210594,0.833205,0.466185},
{1.35,0.965756,0.00377718,0.209831,0.836995,0.459739},
{2.075,0.967627,0.00363039,0.209121,0.840681,0.453434},
{2.8,0.969392,0.00349011,0.208462,0.844266,0.447267},
{3.525,0.971057,0.00335597,0.207849,0.847752,0.441234},
{4.25,0.972627,0.00322763,0.20728,0.851144,0.435332},
{4.975,0.974109,0.00310478,0.206751,0.854443,0.429559},
{5.7,0.975507,0.00298714,0.20626,0.857652,0.423912},
{6.425,0.976826,0.00287442,0.205804,0.860775,0.418387},
{7.15,0.978071,0.00276638,0.20538,0.863813,0.412982},
{7.875,0.979247,0.00266278,0.204986,0.86677,0.407694},
{8.6,0.980356,0.0025634,0.204621,0.869648,0.402519},
{9.325,0.981404,0.00246804,0.204281,0.872449,0.397456},
{10.05,0.982393,0.00237651,0.203966,0.875175,0.392501},
{10.775,0.983327,0.00228861,0.203673,0.87783,0.387652},
{11.5,0.984209,0.00220419,0.203402,0.880414,0.382906},
{12.225,0.985043,0.00212308,0.203149,0.882931,0.37826},
{12.95,0.98583,0.00204514,0.202915,0.885382,0.373712},
{13.675,0.986574,0.00197022,0.202698,0.887769,0.369259},
{14.4,0.987278,0.00189819,0.202496,0.890095,0.364899},
{15.125,0.987942,0.00182892,0.202309,0.892361,0.36063},
{15.85,0.988571,0.0017623,0.202136,0.894568,0.356449},
{16.575,0.989165,0.0016982,0.201975,0.89672,0.352354},
{17.3,0.989727,0.00163653,0.201825,0.898817,0.348343},
{18.025,0.990259,0.00157719,0.201687,0.900861,0.344413},
{18.75,0.990762,0.00152007,0.201558,0.902854,0.340562},
{19.475,0.991237,0.00146509,0.201439,0.904797,0.336789},
{20.2,0.991688,0.00141215,0.201329,0.906691,0.333091},
{20.925,0.992114,0.00136119,0.201226,0.908539,0.329467},
{21.65,0.992517,0.00131211,0.201131,0.910342,0.325914},
{22.375,0.992899,0.00126484,0.201043,0.9121,0.322431},
{23.1,0.99326,0.00121932,0.200962,0.913816,0.319015},
{23.825,0.993602,0.00117547,0.200886,0.91549,0.315666},
{24.55,0.993927,0.00113323,0.200816,0.917124,0.312381},
{25.275,0.994234,0.00109253,0.200752,0.918719,0.309159},
{26,0.994525,0.00105332,0.200692,0.920276,0.305998},
{26.725,0.9948,0.00101554,0.200636,0.921796,0.302897},
{27.45,0.995062,0.000979136,0.200585,0.92328,0.299854},
{28.175,0.995309,0.000944054,0.200537,0.924729,0.296867},
{28.9,0.995544,0.000910245,0.200493,0.926145,0.293935},
{29.625,0.995766,0.000877661,0.200453,0.927528,0.291058},
{30.35,0.995977,0.000846257,0.200415,0.928879,0.288233},
{31.075,0.996177,0.000815988,0.20038,0.930199,0.285458},
{31.8,0.996367,0.000786812,0.200348,0.931488,0.282734},
{32.525,0.996547,0.000758688,0.200318,0.932749,0.280059},
{33.25,0.996718,0.000731578,0.200291,0.933981,0.27743},
{33.975,0.99688,0.000705444,0.200266,0.935186,0.274848},
{34.7,0.997033,0.00068025,0.200242,0.936363,0.272312},
{35.425,0.997179,0.000655962,0.200221,0.937514,0.269819},
{36.15,0.997318,0.000632546,0.200201,0.93864,0.267369},
{36.875,0.997449,0.000609971,0.200182,0.939742,0.264961},
{37.6,0.997574,0.000588206,0.200165,0.940819,0.262594},
{38.325,0.997692,0.000567221,0.20015,0.941872,0.260267},
{39.05,0.997805,0.000546988,0.200135,0.942903,0.257979},
{39.775,0.997912,0.00052748,0.200122,0.943912,0.255729},
{40.5,0.998013,0.000508671,0.20011,0.944899,0.253517},
{41.225,0.998109,0.000490534,0.200099,0.945864,0.25134},
{41.95,0.998201,0.000473046,0.200089,0.94681,0.249199},
{42.675,0.998288,0.000456184,0.200079,0.947735,0.247093},
{43.4,0.99837,0.000439924,0.20007,0.948641,0.24502},
{44.125,0.998449,0.000424246,0.200063,0.949528,0.242981},
{44.85,0.998524,0.000409127,0.200055,0.950397,0.240974},
{45.575,0.998594,0.000394549,0.200049,0.951247,0.238998},
{46.3,0.998662,0.000380491,0.200042,0.95208,0.237054},
{47.025,0.998726,0.000366935,0.200037,0.952896,0.235139},
{47.75,0.998787,0.000353863,0.200032,0.953695,0.233254},
{48.475,0.998845,0.000341257,0.200027,0.954478,0.231398},
{49.2,0.9989,0.000329101,0.200023,0.955245,0.22957},
{49.925,0.998952,0.000317379,0.200019,0.955996,0.22777},
{50.65,0.999002,0.000306074,0.200016,0.956733,0.225997},
{51.375,0.999049,0.000295173,0.200012,0.957455,0.22425},
{52.1,0.999095,0.000284661,0.200009,0.958162,0.222529},
{52.825,0.999137,0.000274523,0.200007,0.958855,0.220833},
{53.55,0.999178,0.000264747,0.200004,0.959535,0.219162},
{54.275,0.999217,0.000255319,0.200002,0.960201,0.217516},
{55.,0.999254,0.000246227,0.2,0.960855,0.215893}
};
int main(int argc, char** argv){
int t = 0,vx;
double dv = (ena-ek)/201.;
double n=0, h=0, minf, ninf, hinf, ntau, htau, a, b, v=-63., ras;
v=-63.;
for(t=0; t<60000000; ++t){
vx = (int)floor((v-ek)/dv);
ras = (v - tbl[vx][0])/dv;
minf = tbl[vx][1] + (tbl[vx+1][1] - tbl[vx][1])*ras;
hinf = tbl[vx][2] + (tbl[vx+1][2] - tbl[vx][2])*ras;
htau = tbl[vx][3] + (tbl[vx+1][3] - tbl[vx][3])*ras;
ninf = tbl[vx][4] + (tbl[vx+1][4] - tbl[vx][4])*ras;
ntau = tbl[vx][5] + (tbl[vx+1][5] - tbl[vx][5])*ras;
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);
}
return 0;
}