2009-06-17 15 views
6

Esta es probablemente una pregunta tonta y fácil, pero a veces parece que las cosas más simples me dan más problemas.Pregunta matemática en C o en el objetivo C

Esta fórmula se supone que dame un número entre 0 y 100.

(200/23) * Abs(Mod(2987, 23) - 23/2) 

En CI objetivo codificado así:

(200/23) * abs(2987 % 23) - (23/2); 

es la fórmula defectuoso (y no da una respuesta entre 0 y 100) o es mi código incorrecto? Parece que mi módulo no me está dando el resultado correcto. ¿No debería darme un entero de un número?

Gracias

+0

Pregunta tonta: en C esto nunca devolvería un número de punto flotante, ya que todos los valores implicados son enteros. ¿Funciona de manera diferente en Objective C? –

+0

No sé lo que está haciendo, pero si alguna vez quiere un número aleatorio: 'arc4random()% 100'. O bien podrías escribir el número constante y terminar con él. – pablasso

Respuesta

17

Su código es incorrecto en C objetiva ...

(200/23) * abs(2987 % 23) - (23/2); 

debería ser

(200/23) * abs((2987 % 23) - (23/2)); 

que está a sólo 73,9.

Pero esta fórmula también es incorrecta, quiere valores entre 0 y 100. Su fórmula actual no llega a 0, porque un% 23 tiene un rango de 0-22, entonces el valor más bajo que puede obtener si resta 23/2 y luego tomar el valor absoluto es .5 (11-11.5 y 12-11.5). 22 sería el número ideal en esta instancia.

También al sustraer 23/2 obtienes una distribución desigual, si solo multiplicas la mod por 100/22, estarás mejor. Ayudaría saber qué estás intentando.

+3

De hecho, podría haber escrito 73.9130434783 :-P. –

+0

¡Perfecto! Sabía que era algo simple ... gracias. – Xcoder