Ваш код неверен в цели 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, вам будет лучше. Это помогло бы узнать, что вы пытаетесь.