2009-06-17 2 views
6

Это, наверное, глупый и простой вопрос, но иногда кажется, что самые простые вещи дают мне больше проблем!Математический вопрос в C или объекте C

Эта формула предположит дать мне число между 0 и 100.

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

В объективном CI кодируется так:

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

ли формула недостатки (и не дает ответ от 0 до 100) или мой код неправильный? Кажется, что мой модуль не дает мне правильный результат. Разве он не должен давать мне целое число?

Благодаря

+0

Глупый вопрос: в C это никогда не вернет число с плавающей запятой, так как все значения будут целыми. Работает ли она по-другому в Objective C? –

+0

Не знаете, что вы делаете, но если вам когда-нибудь понадобится случайное число: 'arc4random()% 100'. Либо вы могли бы просто написать постоянное число и сделать с ним. – pablasso

ответ

17

Ваш код неправильно в объективном C ...

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

Должно быть

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

Который только 73,9.

Но эта формула также неверна, вам нужны значения от 0 до 100. Ваша текущая формула не достигает 0, потому что% 23 имеет диапазон 0-22, поэтому самое низкое значение, которое вы можете получить, если вы вычтите 23/2, а затем принять абсолютное значение .5 (11-11.5 и 12-11.5). 22 было бы идеальным числом в этом случае.

Кроме того, вычитая 23/2, вы получаете неравномерное распределение, если вы просто умножите мода на 100/22, вам будет лучше. Это поможет узнать, что вы пытаетесь сделать.

+3

Действительно, он мог бы просто написать 73.9130434783 :-P. –

+0

Отлично! Я знал, что это что-то простое ... спасибо. – Xcoder

Смежные вопросы