0

抱歉这个不好的问题,但我认为某些变量的舍入有问题。

在我的 C 应用程序中,我必须计算消耗的能量和传感器节点的剩余能量。这是每 10 秒计算一次,如下所示:

cycle_energy = (some long mathematical computation)

energy_spent += cycle_energy;
remaining_energy -= cycle_energy;

在应用程序开始时,这两个量被初始化为:

static float energy_spent = 0;
static float remaining_energy = 1000000;

然后每 10 秒打印一次这两个值。由于我使用的 gcc 支持浮点数进行计算但不支持​​打印,因此我将这两个量转换为无符号长整数。

printf("Energy spent: %lu \n", (uint32_t) energy_spent);
printf("Remaining energy: %lu \n", (uint32_t) remaining_energy);

问题是,在应用程序结束时,数量1000000 - energy_spent应该等于remaining_energy它们的计算方式。

但是,在我的应用程序中并非如此。数量1000000 - energy_spentremaining_energy开始时非常相似,但它们的差异随着时间的推移而增加。

例如,在应用程序结束时,在一个案例中energy_spent = 207223,and remaining_energy = 792093,在另一个energy_spent = 215695and中remaining_energy = 783828

我认为唯一的问题在于我打印值时,但是我认为当仅打印值时它们没有四舍五入。

预先感谢。

4

2 回答 2

1

您只是在体验浮动漂移 - 这绝对不是不寻常的!

规范的方法是

static float energy_spent = 0;
static float total_energy = 1000000;
remaining_energy = 1000000;

接着

energy_spent += cycle_energy;
remaining_energy = total_energy - energy_spent;
于 2013-07-02T09:37:49.363 回答
0

您的问题在于浮点类型本身。它没有足够的有效位来按原样存储您的值。

请参阅此主题:浮点类型的有效位数

于 2013-07-02T09:48:21.260 回答