繁体   English   中英

添加/减去浮点数/整数Linux C

[英]adding/subtracting floats/ints linux C

(可以跳过下面的部分,仅对下面的代码进行解释。我的问题在代码块下。)

喜。 我正在尝试根据Linux计算机正在使用的带宽来限制循环周期。 我每秒读取一次/ proc / net / dev,并跟踪在2个变量中传输的字节。 一个是上次检查的时间,另一个是最近的时间。 从那里减去最近的一个,从最后一个减去最近的一个,以计算在1秒内发送了多少字节。

从那里我有变量max_throttle,节流阀,max_speed和sleepp。

这个想法是根据所使用的带宽来增加或减少sleepp。 带宽越小,延迟越小,时间越长。

我目前不得不处理浮点数和整数。 如果我将所有变量设置为int,则无论我将其他变量设置为什么,即使初始化它们,max_throttle始终为0。

即使我的if语句说“如果sleepp小于0,然后将其返回为0”,它也会越来越深入到负数中,然后在-540左右稳定,使用0带宽。

if(ii&0x40)用于速度和使用控制。 在我的应用程序中,不会有1秒钟的睡眠,因此此代码使我可以限制sleepp每20-30次迭代更改一次。 尽管im也有问题,在触发2X次迭代后,它会继续触发每次迭代,而不是仅一次为真,然后在20-30次迭代后再次为真。

编辑::更简单的测试我的变量问题。

#include <stdio.h>

int main()
{
int max_t, max_s, throttle;

      max_s = 400;
      throttle = 90;
      max_t = max_s * (throttle / 100);
      printf("max throttle:%d\n", max_t);


return 0;
}

在C中,仅与整数一起使用时,运算符/是整数除法。 因此,90/100 =0。为了对整数进行浮点除法,首先将它们转换为浮点数(或double或其他fp类型)。

max_t = max_s * (int)(((float)throttle / 100.0)+0.5);

+0.5在转换为int之前四舍五入。 您可能需要考虑一些标准的地板功能,但我不知道您的用例。

另请注意,100.0是浮点文字,而100是整数文字。 因此,尽管它们看起来相同,但事实并非如此。

正如kralyk所指出的,C的90/100整数除法是0 但是,您可以使用整数来代替使用浮点数……只需在乘法之后进行除法(请注意省略括号):

max_t = max_s * throttle / 100;

这为您提供了总体思路。 例如,如果您希望对kralyk进行四舍五入,请在除法之前添加50

max_t = (max_s * throttle + 50) / 100;

暂无
暂无

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

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