2016-11-22 17 views
0

私は一時的に整数に丸められたdoubleにmod演算子を実装しようとしていますが、コンパイラ(clang)はそのように見えず、エラー:assignment to cast is illegal, lvalue casts are not supportedを返します。 たとえば、このスニペット法的には、丸められた倍精度でmod演算子を実行できますか?

double a; 
int b; 
(int)a %= b; 

でこの制限を回避する方法はありますか?

+0

中間のint変数を使用する – Eugene

+0

''の 'fmod()'関数を探します。 – Peter

答えて

2

あなたがしていることは違法です。このようにしてaを整数にキャストできないため、(int)a = ...と言うのは不正です。あなたは割り当ての右手側にそれを投げなければなりません。

あなたが本当にこれをやってみたかった場合、あなたが言うことができる:

double a; 
int b; 
a = (double)((int)a % b); /* Casting to a double at this point is useless, but because a is a double-type, the result of the modulus it will be implicitly casted to a double if you leave out the explicit cast. */ 

は、私は新しいint型変数にモジュラス結果を割り当てる助言するが、それは作るためにあなたの選択です。


編集:ここではその一例です:http://ideone.com/tidngT

また、ちょうどそれを切り捨て、int型への二重をキャストすると、それを丸めていないことは注目に値するのではなく。また、ダブルの値がintの範囲よりも高い場合は、未定義の動作が発生する可能性があります。

関連する問題