2009-06-17 3 views
6

C'est probablement une question stupide et facile, mais il semble parfois que les choses les plus simples me donnent plus de problèmes!Math Question en C ou Objectif C

Cette formule est supposé me donner un nombre compris entre 0 et 100.

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

Dans CI objectif comme ceci codé:

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

est la formule imparfaite (et ne donne pas une réponse entre 0 et 100) ou mon code est-il faux? Il semble que mon module ne me donne pas le bon résultat. Ne devrait-il pas me donner un nombre entier?

Merci

+0

Question idiote: en C cela ne retournerait jamais un nombre à virgule flottante, puisque toutes les valeurs impliquées sont entières. Est-ce que ça marche différemment dans Objective C? –

+0

Ne sais pas ce que vous faites, mais si vous voulez un nombre aléatoire: 'arc4random()% 100'. Soit vous pourriez simplement écrire le nombre constant et en finir avec cela. – pablasso

Répondre

17

Votre code est erroné dans l'objectif C ...

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

devrait être

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

Ce qui est juste 73,9. Mais cette formule est également incorrecte, vous voulez des valeurs entre 0 et 100. Votre formule actuelle n'atteint pas 0, car un% 23 a une plage de 0-22, donc la valeur la plus basse que vous pouvez obtenir si vous soustrayez 23/2 et ensuite prendre la valeur absolue est .5 (11-11.5 et 12-11.5). 22 serait le nombre idéal dans ce cas. En outre, en soustrayant 23/2, vous obtenez une distribution inégale, si vous venez de multiplier le mod par 100/22, vous seriez mieux lotis. Cela aiderait à savoir ce que vous essayez.

+3

En effet, il aurait pu écrire 73.9130434783 :-P. –

+0

Parfait! Je savais que c'était quelque chose de simple ... merci. – Xcoder