mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-28 05:06:32 +00:00
Shrink sensors code size by 5k using local pow
This commit is contained in:
parent
6573802f83
commit
bafe8a137f
@ -327,6 +327,30 @@ int16_t MutichannelGasSensor::readR(void)
|
|||||||
** Returns:
|
** Returns:
|
||||||
float value - concentration of the gas
|
float value - concentration of the gas
|
||||||
*********************************************************************************************************/
|
*********************************************************************************************************/
|
||||||
|
float MutichannelGasSensor_pow(float a, float b)
|
||||||
|
{
|
||||||
|
// https://martin.ankerl.com/2012/01/25/optimized-approximative-pow-in-c-and-cpp/
|
||||||
|
// calculate approximation with fraction of the exponent
|
||||||
|
int e = abs((int)b);
|
||||||
|
union {
|
||||||
|
double d;
|
||||||
|
int x[2];
|
||||||
|
} u = { a };
|
||||||
|
u.x[1] = (int)((b - e) * (u.x[1] - 1072632447) + 1072632447);
|
||||||
|
u.x[0] = 0;
|
||||||
|
// exponentiation by squaring with the exponent's integer part
|
||||||
|
// double r = u.d makes everything much slower, not sure why
|
||||||
|
double r = 1.0;
|
||||||
|
while (e) {
|
||||||
|
if (e & 1) {
|
||||||
|
r *= a;
|
||||||
|
}
|
||||||
|
a *= a;
|
||||||
|
e >>= 1;
|
||||||
|
}
|
||||||
|
return r * u.d;
|
||||||
|
}
|
||||||
|
|
||||||
float MutichannelGasSensor::calcGas(int gas)
|
float MutichannelGasSensor::calcGas(int gas)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -370,42 +394,42 @@ float MutichannelGasSensor::calcGas(int gas)
|
|||||||
{
|
{
|
||||||
case CO:
|
case CO:
|
||||||
{
|
{
|
||||||
c = pow(ratio1, -1.179)*4.385; //mod by jack
|
c = MutichannelGasSensor_pow(ratio1, -1.179)*4.385; //mod by jack
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NO2:
|
case NO2:
|
||||||
{
|
{
|
||||||
c = pow(ratio2, 1.007)/6.855; //mod by jack
|
c = MutichannelGasSensor_pow(ratio2, 1.007)/6.855; //mod by jack
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NH3:
|
case NH3:
|
||||||
{
|
{
|
||||||
c = pow(ratio0, -1.67)/1.47; //modi by jack
|
c = MutichannelGasSensor_pow(ratio0, -1.67)/1.47; //modi by jack
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case C3H8: //add by jack
|
case C3H8: //add by jack
|
||||||
{
|
{
|
||||||
c = pow(ratio0, -2.518)*570.164;
|
c = MutichannelGasSensor_pow(ratio0, -2.518)*570.164;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case C4H10: //add by jack
|
case C4H10: //add by jack
|
||||||
{
|
{
|
||||||
c = pow(ratio0, -2.138)*398.107;
|
c = MutichannelGasSensor_pow(ratio0, -2.138)*398.107;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAS_CH4: //add by jack
|
case GAS_CH4: //add by jack
|
||||||
{
|
{
|
||||||
c = pow(ratio1, -4.363)*630.957;
|
c = MutichannelGasSensor_pow(ratio1, -4.363)*630.957;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case H2: //add by jack
|
case H2: //add by jack
|
||||||
{
|
{
|
||||||
c = pow(ratio1, -1.8)*0.73;
|
c = MutichannelGasSensor_pow(ratio1, -1.8)*0.73;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case C2H5OH: //add by jack
|
case C2H5OH: //add by jack
|
||||||
{
|
{
|
||||||
c = pow(ratio1, -1.552)*1.622;
|
c = MutichannelGasSensor_pow(ratio1, -1.552)*1.622;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user