我在下面有一个使用浮点数D1
和D2
的函数。它们是等式中的变量。
我不想使用浮点数我在开发的嵌入式平台上受限于内存(浮点库很大)。我只想使用int
s。因此该函数将返回int
并在计算中使用int
。
例如,代替22.95度,该功能将返回229500度。
有人知道我如何计算D1
和D2
应该成为什么值吗?
函数返回的值的范围是-40到120度。
int
的大小为4个字节。
float readTemperatureC()
{
int val; // Raw value returned from sensor
float temperature; // Temperature derived from raw value
// Conversion coefficients from SHT15 datasheet
const float D1 = -40.0; // for 14 Bit @ 5V
const float D2 = 0.01; // for 14 Bit DEGC
// Fetch raw value
val = readTemperatureRaw();
// Convert raw value to degrees Celsius
temperature = (_val * D2) + D1;
return (temperature);
}
这是我要转换为仅使用int的函数。 int readTemperatureC() { int val; //从传感器返回的原始值 温度; //温度来自原始值
// Conversion coefficients from SHT15 datasheet
const int D1 = ?; // for 14 Bit @ 5V
const int D2 = ?; // for 14 Bit DEGC
// Fetch raw value
val = readTemperatureRaw();
// Convert raw value to degrees Celsius
temperature = (val * D2) + D1;
return (temperature);
}
答案 0 :(得分:1)
而不是22.95度,该函数将返回229500度。
将系数乘以10,000并使用整数运算。
// Conversion coefficients from SHT15 datasheet
// const float D1 = -40.0; // for 14 Bit @ 5V
// const float D2 = 0.01; // for 14 Bit DEGC
const int D1 = (int) (-40.0*10000);
const int D2 = (int) (0.01*10000);
...
temperature = (_val * D2) + D1;
注意:OP表示4字节int
。
我怀疑在查看data sheet 后,-40.0
和0.01
的FP值是否正确
OP有commented个正确的data sheet。从4.3节温度
表8
d 1 (VDD = 5 V)= - 40.1°C
d 2 = 0.01°C
T = d 1 + d 2 * SO T
#define d1 (-40.1 /* degrees C */)
#define d2 (0.01 /* degrees C/d2a */)
#define T_SCALE 10000
#define T_OFFSET ((int)(d1 * SCALE))
#define T_SLOPE ((int)(d2 * SCALE))
// Sensor output - temperature
// 0 to 0x3FFF (14-bit)
int SOT = readTemperatureRaw();
// temeprature in 1/10,000 degree C
int temperature = (SOT * T_SLOPE) + T_OFFSET;
// With 32-bit `int`, no range issue
// -401000 <= temperature <= 1237300