Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Точное нормирование целых чисел, требуются советы по алгоритму 
:(
    Опции темы
AntonChik
Дата 11.5.2006, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.10.2005
Где: Красноярск

Репутация: нет
Всего: 1



Здравствуйте.
Сам ничего не нашел (не знаю как лучше искать). Пришел за советом.
Задача примерно такова:
Несколько человек (от 2 до 5) в течение произвольного промежутка времени играют в произвольную игру с набором очков. В конце для каждого участника требуется отнормировать очки, то бишь перевести в проценты от общего числа очков. Причем количество цифр после запятой задается и может быть от 0 до 2.
Например:

Маша - 50;
Вася - 66 ;
Петр - 99;
количество цифр после запятой : 1

Результат:

Маша - 23,2;
Вася - 30,7 ;
Петр - 46,1;

Казалось бы задача проста до боли.
Но при реализации всего этого дела в общем виде я столкнулся со множеством проблем.
В основном, с проблемами точности и проблемой схождения суммы полученных процентов к 100%.
Может я не знаю чего-то простого.
Поделитесь мыслями, пожалуйста.





 
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
Fazil6
Дата 11.5.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

В основном, с проблемами точности и проблемой схождения суммы полученных процентов к 100%.

для последнего не вычисляй, а просто отнимай сумму предыдущих от 100 
PM MAIL   Вверх
regis
Дата 11.5.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Раз дробь надо вычислить в процентах с точностью до 2-х цифр после запятой -- значит стоит попробовать использовать арифметику с фиксированной точкой (по основанию 1/10000).
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
bsa
Дата 11.5.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



По общепринятым правилам, ты не имеешь права указывать точность выше, чем минимальная точность исходных данных (МИФИ, физика, 1-й курс, 1-я лекция, а за нарушение этого правила нам в лучшем случае не засчитывали рассчетную часть задания).
Пример:
9, 21, 312, 4156 - в этом ряду минимальная точность - один знак (число 9), соответственно, любой результат полученный из этих данных должен содержать не более 1 значащего знака.
В твоем случае, ты можешь гарантировать точность НЕ БОЛЕЕ 2-х значащих знаков, так как все твои данные двузначные. 
PM   Вверх
nostromo
Дата 11.5.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: нет
Всего: 10



Код

9, 21, 312, 4156 - в этом ряду минимальная точность - один знак (число 9)


В контексте задачи, очевидно, исходные целые числа имеют абсолютную точность, т.е. сколько угодно знаков после запятой 
9==9.0000000.... 
PM MAIL   Вверх
Earnest
Дата 11.5.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Fazil6 @  11.5.2006,  11:04 Найти цитируемый пост)
для последнего не вычисляй, а просто отнимай сумму предыдущих от 100  

Поддерживаю. Чтобы внести элемент справедливости  smile, можно это делать не для последнего, а для минимального (или максимального).  
 


--------------------
...
PM   Вверх
AntonChik
Дата 12.5.2006, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.10.2005
Где: Красноярск

Репутация: нет
Всего: 1



естественно "свалить грехи" на минимальный показатель очень удобно.
НО это может и аукнуться, особенно для примерно одинаковых исходных чисел... сам знаю. т.е. все равно придется делать дополнительные проверки и  если где-то обнаружится перебор, то придется делать откат - округлять заново или делать что-то еще. я почему и пишу, что,если делать в общем виде, то подобные выкладки выглядят не совсем убедительно. 

может кто-то решал подобные задачи на практике? 
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
nostromo
Дата 12.5.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: нет
Всего: 10



Цитата

НО это может и аукнуться, особенно для примерно одинаковых исходных чисел... 


А можно пример? Возможно, это только кажется. 
PM MAIL   Вверх
Дрон
Дата 12.5.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(AntonChik @  11.5.2006,  11:01 Найти цитируемый пост)
В основном, с проблемами точности и проблемой схождения суммы полученных процентов к 100%.
Может я не знаю чего-то простого.

Цитата(AntonChik @  11.5.2006,  11:01 Найти цитируемый пост)
Причем количество цифр после запятой задается и может быть от 0 до 2.

Ну так раз ты сам ограничиваешь точность вычислений, то тут уже ничего не попишешь.
Трое набрали равные очки, тогда имеем 33,33% для каждого. Естественно, что в сумме это не будет 100%.

Если хочешь добиться "внешнего" эффекта, то наверно погрешность лучше "сваливать" на максимальный элемент, тогда относительная погрешность для него будет минимальной.
 


--------------------
Да. Именно так.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0732 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.