1

ここでは、特に unsigned int と #defines (型に関係なく) から double への正しいキャストについてよくわかりません。

この例では

#define SPEEDSENSOR_EDGES_NUM 10

int speed_counter_left;

double result = speed_counter_left / SPEEDSENSOR_EDGES_NUM;

speed_counter_left が < 10 の場合、結果は常に 0 です。

だから私はいくつかのキャストを入れました:

double result = (double) ((double) speed_counter_left / (double) SPEEDSENSOR_EDGES_NUM);

その通りですが、キャストが多すぎると思います。最小のキャストで正しい方法を見つけるにはどうすればよいですか?

4

2 に答える 2

6

オペランドが1 つdoubleあれば十分です。

double result = (double)speed_counter_left / SPEEDSENSOR_EDGES_NUM;

キャストはに最も近い位置に「くっつきますspeed_counter_left」 。したがって、本質的には次と同等です。

double result = ((double)speed_counter_left) / SPEEDSENSOR_EDGES_NUM;

そして #defines (どんな型でも) double に。

標準は次のように述べています。

6.4.4.1 - 5

整数定数の型は、その値を表すことができる対応するリストの最初のものです。

そして (接尾辞のない 10 進定数の場合) リストは次のようになります: int, long int, long long int.

于 2012-06-03T11:42:40.447 に答える
0

キャストする必要はありません。代わりに を使用して を作成SPEEDSENSOR_EDGES_NUMしてください。double10.010

#define SPEEDSENSOR_EDGES_NUM 10.0

int speed_counter_left;

double result = speed_counter_left / SPEEDSENSOR_EDGES_NUM;
于 2012-06-03T11:49:12.057 に答える