【发布时间】:2013-07-02 09:31:12
【问题描述】:
抱歉这个问题不好,但我认为某些变量的舍入有问题。
在我的 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 支持浮点数进行计算但不支持打印,因此我将这两个量转换为 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_spent 和 remaining_energy 的数量一开始非常相似,但随着时间的推移它们的差异会增加。
例如,在应用程序结束时,在一个情况下是energy_spent = 207223 和remaining_energy = 792093,在另一个情况下是energy_spent = 215695 和remaining_energy = 783828。
我认为唯一的问题在于打印值时,但是我认为仅打印值时它们没有四舍五入。
提前致谢。
【问题讨论】:
-
.f后缀为float例如static float remaining_energy = 1000000.f; -
@DavidRF 他为什么要这么做?
-
@DavidRF 你的意思是我的变量
remaining_energy被初始化为整数吗? -
@rasen %f 不适用于 msp430 gcc,因为我需要将它们转换为无符号整数。
-
您可以使用 printf 的 %f 标志打印浮点数。当您打印转换为 uint32_t 的值时,该值不是四舍五入而是截断。
标签: c floating-point printf