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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу вычислить процент выполненной операции 
V
    Опции темы
SABROG
  Дата 23.12.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



У меня есть такой цикл:

Код

            for (int i = 0; i < 0xFFFFFFFF; ++i)
            {
...
            }


Т.е. я перебираю все возможные значения от 0 до 4294967295. Как мне получить какой процент этой операции завершен, чтобы вывести в консоль. Пытался использовать такую формулу: (i/0xFFFFFFFF)*100 Пытался использоваться типы float, double, long. Скорее всего проблема в размере, т.е. нужно правильно выбрать тип, чтобы при таком раскладе это все грамотно вычислялось: (2863311530/4294967295)*100=66,6
А я получаю все время отрицательные значения после 49%.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
djamshud
Дата 23.12.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

Репутация: 4
Всего: 39



Код

#include<stdio.h>

int main(){
for(unsigned int i=0;i!=0xFFFFFFFF;i++)
if(i%99999999==0)
printf("%f - %X\n",double(i)/0xFFFFFFFF*100,i);
return 0;
}




--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 23.12.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 6
Всего: 26



SABROG, ты уверен что тебе нужная такая точность для отображения процентов?)

Добавлено через 49 секунд
> 66,6
для 1 знака после запятой такие большие числа не нужны
PM MAIL ICQ   Вверх
SABROG
Дата 23.12.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Всё, спасибо. Разобрался. Ошибка у меня тут:

Код

for (unsigned int = 0


У меня было int. 

А эта штука меняет прогресс каждые 99 млн:

Код

if (i%99999999 == 0)


Но я сделал иначе, ведь цифра может быть любая:

Код

for (unsigned int i = 0xFFFFFFFF, j=0xFFFFFFFF/100*5;i != 0; --i)
...
if (i%j == 0) {


Т.е. буду менять каждые 5%

Это сообщение отредактировал(а) SABROG - 23.12.2009, 21:56


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
djamshud
Дата 23.12.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

Репутация: 4
Всего: 39



>Так, насчет этого я понял, надо unsigned int, вместо int:

Правильно. А это

Код

if(i%99999999==0)


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

Добавлено через 6 минут и 12 секунд
На самом деле для подобного "замедления" вывода правильно использовать какой-нибудь таймер, чтобы распечатывать например раз в секунду.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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