fix fixed-point calclulations

This commit is contained in:
eddyem 2018-05-27 19:09:10 +03:00
parent a6ef59c73e
commit 87784ffbda

View File

@ -96,7 +96,7 @@ uint8_t calc_t(uint32_t t, int i){
int j; int j;
double d = (double)t/256., tmp = 0.; double d = (double)t/256., tmp = 0.;
// k0*(-1.5e-2) + 0.1*1e-5*val*(1*k1 + 1e-5*val*(-2.*k2 + 1e-5*val*(4*k3 + 1e-5*val*(-2*k4)))) // k0*(-1.5e-2) + 0.1*1e-5*val*(1*k1 + 1e-5*val*(-2.*k2 + 1e-5*val*(4*k3 + 1e-5*val*(-2*k4))))
double mul[5] = {-1.5e-2, 1., -2., 4., -2.}; const double mul[5] = {-1.5e-2, 1., -2., 4., -2.};
for(j = 4; j > 0; --j){ for(j = 4; j > 0; --j){
tmp += mul[j] * (double)coefficients[i][j]; tmp += mul[j] * (double)coefficients[i][j];
tmp *= 1e-5*d; tmp *= 1e-5*d;
@ -121,17 +121,23 @@ uint8_t calc_t(uint32_t t, int i){
return 1; return 1;
} }
/* /*
void calc_t(){ uint8_t calc_t(uint32_t t, int i){
int i; if(coefficients[i][0] == 0){
for(i = 0; i < 2; ++i){ if(i == 0) showcoeffs(TSYS01_ADDR0, 0);
if(!Tlast[i] || !coefficients[i][0]) continue; else showcoeffs(TSYS01_ADDR1, 0);
}
if(coefficients[i][0] == 0){
SEND("no sensor\n");
return 0;
}
if (t < 6500000 || t > 13000000) return 0; // wrong value - too small or too large
int j; int j;
int64_t d = Tlast[i], tmp = 0.; int64_t d = t, tmp = 0.;
// k0*(-1.5e-2) + 0.1*1e-5*val*(1*k1 + 1e-5*val*(-2.*k2 + 1e-5*val*(4*k3 + 1e-5*val*(-2*k4)))) // k0*(-1.5e-2) + 0.1*1e-5*val*(1*k1 + 1e-5*val*(-2.*k2 + 1e-5*val*(4*k3 + 1e-5*val*(-2*k4))))
int8_t mul[5] = {0, 1, -2, 4, -2}; int8_t mul[5] = {0, 1, -2, 4, -2};
for(j = 4; j > 0; --j){ for(j = 4; j > 0; --j){
tmp /= 100000; tmp /= 100000;
tmp += mul[j] * (double)coefficients[i][j]; tmp += mul[j] * coefficients[i][j];
tmp *= d; tmp *= d;
tmp >>= 8; // (/256) tmp >>= 8; // (/256)
} }
@ -152,7 +158,7 @@ void calc_t(){
SEND("."); SEND(".");
printu((uint32_t)tmp); printu((uint32_t)tmp);
newline(); newline();
} return 1;
}*/ }*/
int main(void){ int main(void){