繁体   English   中英

不需要的舍入C ++

[英]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_R0THERMISTOR _BETA是常量。

temptemp2desiredVoltage是unsigned int,在计算之前定义。

问题是,例如,当术语((temp2/temp)-1)低于1时,它会向下舍入为0.我想摆脱这种舍入,因为它会导致我的计算出现大问题。

我该怎么做呢?

它不是四舍五入,而是整数除法。 如果/运算符的两个操作数都是整数类型,则C ++的行为是执行整数除法,该整数除法仅保留结果的整数部分(这在某些算法中通常需要,因为它更快)。

要获得“常规”除法,请确保所涉及的操作数中至少有一个是浮点类型( floatdoublelong double ); 您可以将此参数声明为FP类型

double temp2, temp;

要么在其中一个操作数前面贴一个演员。

temp=(THERMISTOR_R0)/((double(temp2)/temp)-1);

(请注意,如果temp仍然是整数类型,那么你将在截断时产生)。

最有可能的是,在这里你只需要将temptemp2声明为double (如果你在一个非常资源密集的环境中工作,则float )。

另外,当用数字文字除以时,请记住,如果你不写小数点,它将是一个int literal,如果你写它,它将是一个double 例如, 298int298.double ,所以1/20 ,但是1/2. 0.5

如果需要浮点除法行为,请确保使用浮点类型。

编译器将浮点值向下舍入。

通常,通过在转换为整数之前将值加0.5来解决此问题。 您可能希望显式使用浮点值(或强制转换),然后在转换为整数之前将0.5添加到结果中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM