0

悪い質問で申し訳ありませんが、特定の変数の丸めに問題があると思います。

私の C アプリケーションでは、消費したエネルギーとセンサー ノードの残りのエネルギーを計算する必要があります。これは、次のように 10 秒ごとに計算されます。

cycle_energy = (some long mathematical computation)

energy_spent += cycle_energy;
remaining_energy -= cycle_energy;

アプリケーションの開始時に、2 つの数量は次の場所で初期化されます。

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

その後、10 秒ごとに 2 つの値が出力されます。私が使用する gcc は、計算では float をサポートしていますが、印刷ではサポートしていないため、2 つの量を 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

値を印刷するときに唯一の問題があると思いますが、値を印刷するだけでは丸められません。

少し早いですがお礼を。

4

2 に答える 2