[英]Unwanted rounding C++
我有以下等式:
//get thermistor resistor value
temp=(THERMISTOR_R0)/((temp2/temp)-1);
//get temperature value in Kelvins and convert to Celsiuis
temp=(THERMISTOR_BETA)/log(temp/(THERMISTOR_R0*exp((-THERMISTOR_BETA)/298)));
temp-=273;
desiredVoltage =((15700-(25*temp))/10);
THERMISTOR_R0
和THERMISTOR _BETA
是常量。
temp
, temp2
和desiredVoltage
是unsigned int,在计算之前定义。
问题是,例如,当术语((temp2/temp)-1)
低于1时,它会向下舍入为0.我想摆脱这种舍入,因为它会导致我的计算出现大问题。
我该怎么做呢?
它不是四舍五入,而是整数除法。 如果/
运算符的两个操作数都是整数类型,则C ++的行为是执行整数除法,该整数除法仅保留结果的整数部分(这在某些算法中通常需要,因为它更快)。
要获得“常规”除法,请确保所涉及的操作数中至少有一个是浮点类型( float
, double
或long double
); 您可以将此参数声明为FP类型
double temp2, temp;
要么在其中一个操作数前面贴一个演员。
temp=(THERMISTOR_R0)/((double(temp2)/temp)-1);
(请注意,如果temp
仍然是整数类型,那么你将在截断时产生)。
最有可能的是,在这里你只需要将temp
和temp2
声明为double
(如果你在一个非常资源密集的环境中工作,则float
)。
另外,当用数字文字除以时,请记住,如果你不写小数点,它将是一个int
literal,如果你写它,它将是一个double
。 例如, 298
是int
, 298.
是double
,所以1/2
是0
,但是1/2.
是0.5
。
如果需要浮点除法行为,请确保使用浮点类型。
编译器将浮点值向下舍入。
通常,通过在转换为整数之前将值加0.5来解决此问题。 您可能希望显式使用浮点值(或强制转换),然后在转换为整数之前将0.5添加到结果中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.