gpt4 book ai didi

c - 仅打印时值是否四舍五入?

转载 作者:行者123 更新时间:2023-11-30 15:47:25 24 4
gpt4 key购买 nike

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

在我的 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 支持 float 计算,但不支持打印,因此我将这两个数量转换为 unsigned long。

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 = 207223remaining_energy = 792093,在另一个情况下 energy_spent = 215695remaining_energy = 783828

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

提前致谢。

最佳答案

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

规范的方法是

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

然后

energy_spent += cycle_energy;
remaining_energy = total_energy - energy_spent;

关于c - 仅打印时值是否四舍五入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17422061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com