Objective-C /ココアタッチでモジュロ演算を行う方法は?


82

2つのCGFloat値があり、モジュロ結果を計算したいと思います。言い換えれば、valueAをvalueBにできるだけ配置した場合に何が残るかを知りたいのです。

だから私はちょうど試しました:

CGFloat moduloResult = valueB % valueA;

コンパイラは%について文句を言い、「バイナリ%に対する無効なオペランド」と表示します。何か案が?

回答:


204

%は、intまたはlong、ではなくfloatdoubleです。

代わりにfmod()またはfmodf()からを使用できます<math.h>

ベターはある<tgmath.h>ようCGFloatの発明によって提案します


2
tgmath.hはiPhoneで利用できますか?math.hを含める必要がなかったので疑問に思います。ファウンデーションフレームワークが付属していると思います。

また、とにかくtgmath.hとmath.hの違いは何ですか?
user4951 2012年

4
ジム:tgmath.h「ジェネリック型」(したがって「tg」)であるためmath.h、入力の型を指定して呼び出す関数を決定します。(例えば、呼び出しfloor(x)tgmath.h含まれることは(から呼び出すmath.hfloorf(x)場合xfloatfloor(x)あればxあるdouble、またはfloorl(x)場合xであるlong double。)
ジョージWS

10

モジュロが入力として2intを必要とすることを正しく覚えている場合は、次のようなものが必要になります。

CGFloat moduloResult = (float)((int)valueB % (int)valueA);

valueBとvalueAが両方ともfloatであると仮定します


3
もちろん、これは丸めのために正しい答えを与えることはありません。
fishinear 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.