Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2013, 17:17   #1
phenix
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 12
По умолчанию Перебор дробных значений от 0 до 100.

Привет всем.
Как в с++ перебрать дробных значений от 0 до 100 с промежутком в 0.01(т.е. 0,00 0,01 0,02 ... 99,98 99,99 100,00). Я пробовал так:
Код:
    double i;
    for(i = 0; i<=100; i += 0.01)  {
        //...
    }
Но i равно 0.0999999 или 0.1000005454
Пожалуйста подскажите как сделать чтобы получать точные значения, т.е. 0.1
phenix вне форума Ответить с цитированием
Старый 03.01.2013, 17:34   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Имхо, точные Вы не получите.
Число получается из суммы чисел кратных 2, т.е. 1/2, 1/4, 1/8, 1/16, т.е. точно представить 1/10 нельзя.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.01.2013, 17:36   #3
studen
Пользователь
 
Регистрация: 21.05.2012
Сообщений: 88
По умолчанию

Точных значений получить не удастся, так как в двоичной системе 0,01 - бесконечная периодическая дробь. В памяти хранится приближенное значение. Можно сделать цикл от 0 до 10000, а в теле цикла использовать значение, уменьшенное в 100 раз. Можно использовать вывод числа в указываемом формате.
Ну и вообще, такая точность - это все равно что измерять длину экватора Земли с точностью до сантиметра.
studen вне форума Ответить с цитированием
Старый 03.01.2013, 17:40   #4
phenix
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 12
По умолчанию

А возможно сделать как-то так: прибавлять 0,001(чтобы отсечь 0.0999999) и выводить до 2 знаков после запятой?

Последний раз редактировалось phenix; 03.01.2013 в 17:45.
phenix вне форума Ответить с цитированием
Старый 03.01.2013, 17:48   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Кстати, у меня в CodeBlocks (gcc) выводится без этих "кривых" окончаний.
Если только для вывода, то попробуйте printf("%.2lf ",i);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.01.2013, 18:03   #6
phenix
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 12
По умолчанию

Большое спасибо
phenix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перебор всех доступных значений! AquaKlaster Общие вопросы Delphi 40 02.03.2015 12:27
Перебор значений (DevC++) InquisitorAles Помощь студентам 5 21.11.2010 23:26
Перебор значений таблицы Domain Microsoft Office Excel 2 05.10.2010 05:33
Перебор значений для поиска RailOS Microsoft Office Excel 5 17.06.2010 16:16
Перебор значений genf Microsoft Office Excel 0 18.12.2009 10:56