Математический Вопрос в C или Задача C - PullRequest
6 голосов
/ 17 июня 2009

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

Предполагается, что эта формула даст мне число от 0 до 100.

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

В цели C я кодировал это так:

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

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

Спасибо

1 Ответ

17 голосов
/ 17 июня 2009

Ваш код неверен в цели 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, а затем принять абсолютное значение составляет 0,5 (11-11,5 и 12-11,5). 22 будет идеальным числом в этом случае.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...