私は一時的に整数に丸められたdoubleにmod演算子を実装しようとしていますが、コンパイラ(clang)はそのように見えず、エラー:assignment to cast is illegal, lvalue casts are not supported
を返します。 たとえば、このスニペット法的には、丸められた倍精度でmod演算子を実行できますか?
double a;
int b;
(int)a %= b;
でこの制限を回避する方法はありますか?
私は一時的に整数に丸められたdoubleにmod演算子を実装しようとしていますが、コンパイラ(clang)はそのように見えず、エラー:assignment to cast is illegal, lvalue casts are not supported
を返します。 たとえば、このスニペット法的には、丸められた倍精度でmod演算子を実行できますか?
double a;
int b;
(int)a %= b;
でこの制限を回避する方法はありますか?
あなたがしていることは違法です。このようにして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
の範囲よりも高い場合は、未定義の動作が発生する可能性があります。
中間のint変数を使用する – Eugene
''の 'fmod()'関数を探します。 –
Peter