¿Cómo hacer una operación de módulo en aim-c / cocoa touch?

82

Tengo dos valores CGFloat y quiero calcular el resultado del módulo. O en otras palabras: quiero saber qué queda si valueA se coloca tanto como sea posible en valueB.

Así que intenté:

CGFloat moduloResult = valueB % valueA;

el compilador se queja del% y me dice: "operandos no válidos en% binario". ¿Alguna idea?


fuente

Respuestas:

204

% es para into long, no floato double.

Puede usar fmod()o fmodf()desde en su <math.h>lugar.

Mejor es lo <tgmath.h>que sugiere el inventor de CGFloat .

Mouviciel
fuente
2
¿Está disponible tgmath.h en el iphone? Me pregunto porque nunca tuve que incluir matemáticas. Viene con el marco de la base, creo.
Además, ¿cuál es la diferencia entre tgmath.hy math.h de todos modos?
user4951
4
Jim: tgmath.hes de "tipo genérico" (de ahí el "tg") y, por lo tanto, decidirá qué math.hfunción llamar dado el tipo de su entrada. (Por ejemplo, llamar floor(x)con tgmath.hincluido llamará (desde math.h) floorf(x)si xes a float, floor(x)si xes a double, o floorl(x)si xes a long double.)
George WS
10

Si recuerdo correctamente, el módulo requiere 2 entradas como entrada, por lo que necesitaría algo como:

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

Suponiendo que valueB y valueA son ambos flotantes

James
fuente
3
Esto, por supuesto, no le dará la respuesta correcta debido al redondeo.
Fishinear