0

これらの操作の結果がどうなるかについて、いくつか質問があります。

まず、2つの整数があり、それらを除算して結果をdoubleに保存する場合。1/2が1ではなく0.5に等しくなるような丸めの問題はありますか?

double ratio = int1/int2;

次に、この比率にUWORDを掛けると、問題は発生しますか?

UWORD word1 = 4098;
UWORD word2 = ratio * word1; 

ちなみに、これらを行うとコンパイラの警告が表示されます

 narrowing or signed-to-unsigned type conversion found: double to unsigned short
4

1 に答える 1

1

コンパイラが(整数ではなく)浮動小数点計算を使用することを認識できるように、にキャストint1する必要があります。double

double ratio = ((double) int1) / int2;

の浮動小数点計算を格納するにはration * word1UWORD(警告を防ぐために)再度キャストする必要があります。

UWORD word2 = (UWORD) (ratio * word1);

注:適切な丸めが必要な場合は、から利用できるround()関数math.hを試してください。(繰り返しますが、適切なキャストで!)

于 2013-01-21T14:22:11.650 に答える