![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| AntonChik |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 4.10.2005 Где: Красноярск Репутация: нет Всего: 1 |
Здравствуйте.
Сам ничего не нашел (не знаю как лучше искать). Пришел за советом. Задача примерно такова: Несколько человек (от 2 до 5) в течение произвольного промежутка времени играют в произвольную игру с набором очков. В конце для каждого участника требуется отнормировать очки, то бишь перевести в проценты от общего числа очков. Причем количество цифр после запятой задается и может быть от 0 до 2. Например: Маша - 50; Вася - 66 ; Петр - 99; количество цифр после запятой : 1 Результат: Маша - 23,2; Вася - 30,7 ; Петр - 46,1; Казалось бы задача проста до боли. Но при реализации всего этого дела в общем виде я столкнулся со множеством проблем. В основном, с проблемами точности и проблемой схождения суммы полученных процентов к 100%. Может я не знаю чего-то простого. Поделитесь мыслями, пожалуйста. --------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
для последнего не вычисляй, а просто отнимай сумму предыдущих от 100 |
|||
|
||||
| regis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: 2 Всего: 7 |
Раз дробь надо вычислить в процентах с точностью до 2-х цифр после запятой -- значит стоит попробовать использовать арифметику с фиксированной точкой (по основанию 1/10000).
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
По общепринятым правилам, ты не имеешь права указывать точность выше, чем минимальная точность исходных данных (МИФИ, физика, 1-й курс, 1-я лекция, а за нарушение этого правила нам в лучшем случае не засчитывали рассчетную часть задания).
Пример: 9, 21, 312, 4156 - в этом ряду минимальная точность - один знак (число 9), соответственно, любой результат полученный из этих данных должен содержать не более 1 значащего знака. В твоем случае, ты можешь гарантировать точность НЕ БОЛЕЕ 2-х значащих знаков, так как все твои данные двузначные. |
|||
|
||||
| nostromo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 23.3.2006 Репутация: нет Всего: 10 |
В контексте задачи, очевидно, исходные целые числа имеют абсолютную точность, т.е. сколько угодно знаков после запятой 9==9.0000000.... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Поддерживаю. Чтобы внести элемент справедливости -------------------- ... |
|||
|
||||
| AntonChik |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 4.10.2005 Где: Красноярск Репутация: нет Всего: 1 |
естественно "свалить грехи" на минимальный показатель очень удобно.
НО это может и аукнуться, особенно для примерно одинаковых исходных чисел... сам знаю. т.е. все равно придется делать дополнительные проверки и если где-то обнаружится перебор, то придется делать откат - округлять заново или делать что-то еще. я почему и пишу, что,если делать в общем виде, то подобные выкладки выглядят не совсем убедительно. может кто-то решал подобные задачи на практике? --------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги |
|||
|
||||
| nostromo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 23.3.2006 Репутация: нет Всего: 10 |
А можно пример? Возможно, это только кажется. |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Ну так раз ты сам ограничиваешь точность вычислений, то тут уже ничего не попишешь. Трое набрали равные очки, тогда имеем 33,33% для каждого. Естественно, что в сумме это не будет 100%. Если хочешь добиться "внешнего" эффекта, то наверно погрешность лучше "сваливать" на максимальный элемент, тогда относительная погрешность для него будет минимальной. -------------------- Да. Именно так. |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |