2009-06-17 18 views
6

Dies ist wahrscheinlich eine dumme und einfache Frage, aber es scheint manchmal die einfachsten Dinge geben mir mehr Probleme!Math Frage in C oder Objective C

Diese Formel nehme mir eine Zahl zwischen 0 und 100.

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

In Ziel CI es so codiert zu geben:

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

fehlerhaft ist die Formel (und nicht geben eine Antwort zwischen 0 und 100) oder ist mein Code falsch? Es scheint, dass mein Modul mir nicht das richtige Ergebnis gibt. Sollte es mir nicht eine ganze Zahl geben?

Dank

+0

Dumme Frage: in C würde dies nie eine Gleitkommazahl zurückgeben, da alle beteiligten Werte Integer sind. Funktioniert es in Ziel C anders? –

+0

Ich weiß nicht, was Sie tun, aber wenn Sie jemals eine Zufallszahl wollen: 'arc4random()% 100'. Entweder Sie könnten einfach die konstante Zahl schreiben und damit fertig sein. – pablasso

Antwort

17

Ihr Code in Objective C ist falsch ...

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

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

die nur 73,9 ist.

Aber diese Formel ist auch falsch, Sie wollen Werte zwischen 0 und 100. Ihre aktuelle Formel erreicht nicht 0, weil ein% 23 einen Bereich von 0-22 hat, also den niedrigsten Wert, wenn Sie 23 subtrahieren/2 und dann den absoluten Wert ist .5 (11-11,5 und 12-11,5). 22 wäre in diesem Fall die ideale Zahl.

Auch wenn man 23/2 subtrahiert bekommt man eine ungleiche Verteilung, wenn man den Mod einfach mit 100/22 multipliziert, wäre man besser dran. Es würde helfen, zu wissen, was Sie versuchen.

+3

Tatsächlich hätte er gerade 73.9130434783 :-P geschrieben. –

+0

Perfekt! Ich wusste, es war etwas Einfaches ... Danke. – Xcoder