2009-08-13 9 views
77

Mam dwie wartości CGFloat i chcę obliczyć wynik modulo. Lub innymi słowy: chcę wiedzieć, co pozostało, jeśli valueA zostanie umieszczone jak najwięcej w wartości B.Jak wykonać operację modulo w aspekcie c/kakaowym?

Więc po prostu próbowałem:

CGFloat moduloResult = valueB % valueA; 

kompilator narzeka na% i mówi mi: "Nieprawidłowe argumenty do binarnego%". Dowolny pomysł?

Odpowiedz

189

% jest dla int lub long, a nie float lub double.

Zamiast tego można użyć fmod() lub fmodf() z <math.h>.

Lepsze jest <tgmath.h> jako suggested by the inventor of CGFloat.

+2

jest tgmath.h dostępny na iPhone? Zastanawiam się, ponieważ nigdy nie musiałem uwzględniać matematyki. Wydaje mi się, że chodzi o ramy fundamentowe. –

+0

Jaka jest różnica między tgmath.h a math.h? –

+4

Jim: 'tgmath.h' jest" typem ogólnym "(stąd" tg ") i tym samym zdecyduje, która funkcja' math.h' zadzwoni, biorąc pod uwagę typ twojego wejścia. (Na przykład wywołanie 'floor (x)' z 'tgmath.h' spowoduje wywołanie (z' math.h') 'floorf (x)' jeśli 'x' jest' float', 'floor (x)' jeśli 'x' jest' podwójnym' lub 'floorl (x)' jeśli 'x' jest' długim podwójnym '.) –

10

Jeśli dobrze pamiętam modulo wymaga 2 ints jak jego wejście tak, że trzeba coś takiego:

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

Zakładając, że valueB i ZMIENNAa są zarówno pływa

+0

To, oczywiście, nie da ci poprawnej odpowiedzi, z powodu zaokrąglenia. – fishinear