Wie mache ich eine Modulo-Operation in Objective-C / Cocoa Touch?


82

Ich habe zwei CGFloat-Werte und möchte das Modulo-Ergebnis berechnen. Oder mit anderen Worten: Ich möchte wissen, was noch übrig ist, wenn valueA so weit wie möglich in valueB platziert wird.

Also habe ich einfach versucht:

CGFloat moduloResult = valueB % valueA;

Der Compiler beschwert sich über% und sagt mir: "Ungültige Operanden zu binärem%". Irgendeine Idee?

Antworten:


203

% ist für intoder long, nicht floatoder double.

Sie können stattdessen fmod()oder fmodf()von <math.h>verwenden.

Besser ist, <tgmath.h>wie vom Erfinder von CGFloat vorgeschlagen .


2
ist tgmath.h auf dem iphone verfügbar? Ich frage mich, weil ich math.h nie einbeziehen musste. Ich denke, es kommt mit dem Grundgerüst.

Was ist überhaupt der Unterschied zwischen tgmath.h und math.h?
user4951

4
Jim: tgmath.hist "type generic" (daher das "tg") und entscheidet daher, welche math.hFunktion angesichts des Typs Ihrer Eingabe aufgerufen werden soll. (Wenn Sie beispielsweise floor(x)mit tgmath.heingeschlossen anrufen, wird (von math.h) aufgerufen, floorf(x)wenn xa float, floor(x)if xa doubleoder floorl(x)if a xist long double.)
George WS

10

Wenn ich mich richtig erinnere, benötigt Modulo 2 Zoll als Eingabe, sodass Sie Folgendes benötigen:

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

Angenommen, valueB und valueA sind beide Floats


3
Dies gibt Ihnen aufgrund von Rundungen natürlich nicht die richtige Antwort.
fishinear
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.