Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
#1

Почти ноль - не устраивает - C++

14.02.2012, 19:38. Просмотров 655. Ответов 5
Метки нет (Все метки)

Подскажите кто знает , вот примерчик :
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
int main()
{
double val = -1.0;
while(val < 1.0){
val += 0.1;
std::cout << "\t\t"<< val << std::endl;
}
return 0;
}
А вот результат :
Почему: -138778e - 016 ? Почти ноль ,но не ноль.
Миниатюры
Почти ноль - не устраивает  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2012, 19:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почти ноль - не устраивает (C++):

почти судоку) - C++
Уже создавала эту тему, но никто не ответил.Может не увидели или не успели.. .Если кто может помочь прошу помогите решить задачу на СИ ...

Почти эпсилон - C++
Дано число x, единице оно может быть и не равно. Требуется найти наименьшее e, удовлетворяющее условиям: e&gt;0 и сумма x+e имеет иной код...

строки C++ почти готовая - C++
вот условие: Дан текст, состоящий из N (2&lt;=N&lt;=10) строк с максимальной длиной 80 символов. Необходимо вывести этот текст, зашифрованный...

Почти счастливый билет - C++
В гугле полно задач про &quot;Счастливые билеты&quot;, а у меня возникла проблема с &quot;Почти счастливыми билетами. Вот задача - Назовем “почти...

Почти отсортированный массив - C++
Почти отсортированный массив Ограничение времени 2 секунды Ограничение памяти 512Mb Ввод стандартный ввод или input.txt ...

Одномерный массив, почти доделал - C++
в одномерном массиве состоящем из n вещественных элементов, вычислить: 1) Количество элементов массива, лежащих в диапазоне от А до В. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.02.2012, 19:49 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <iomanip>
 
int main()
{
    double val; 
    val = -1.0;
    while(val < 1.0)
    {
        val += 0.1;
        std::cout << std::fixed << std::setprecision(1) << val << std::endl;
    }
    system("pause >> null");
    return 0;
}
Миниатюры
Почти ноль - не устраивает  
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
14.02.2012, 19:55  [ТС] #3
Infinity3000, понятно что можно обрезать .Как объяснить
что результат не равен : 0
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
14.02.2012, 19:58 #4
Цитата Сообщение от MrCold Посмотреть сообщение
что результат не равен - 0
Я думаю потому что тип double имеет формат 0.0 ! а когда -0.1 + 0.1 = 0, следовательно не подходит формат записи!)))))))))))
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.02.2012, 11:29 #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
MrCold, всё дело в ошибке округления. Тип double не может с бесконечной точностью представлять числа, иногда приходится отбрасывать разряды, которые он не может уместить. Отсюда и проблема. Вообще, две переменные типа double даже сравнивать принято не так
C++
1
if (dbl1 == dbl2)
, а, например, так
C++
1
if (fabs(dbl1 - dbl2) < 1e-8)
, поскольку в первом случае числа могут (с определённой точностью) быть равными, но, тем не менее, воспримутся как различные (например, в вашем примере сравнение с нулём ни разу не даст истину, хотя один раз число на самом деле является нулём).
Байт
Эксперт C
15984 / 10252 / 1536
Регистрация: 24.12.2010
Сообщений: 19,336
15.02.2012, 12:26 #6
MrCold, В 2-ичной системе счисления o.1 - бесконечная периодическая дробь. Пока наши компутеры, сколь они не мощны, с бесконечностью не справляются
Вот если б ты взял 0.125 вместо 0.1, может быть чего-то и вышло
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2012, 12:26
Привет! Вот еще темы с ответами:

Почти отсортированные случайные данные - C++
что такое почти отсортированные случайные данные? мне необходимо эти данные отсортировать быстрой сортировкой.

Задачка почти на смекалку, помоги те же решить - C++
мне тут задание досталось: придумайте примеры синтаксически правильных констукций на языке С++,в которых рядом находилось бы ровно одна,...

Ошибки в почти готовой игре Змейка - C++
Добрый день. Помогите, пожалуйста, исправить ошибки или дайте хотя бы совет, что не так. Очень долго сижу и думаю над вариантами...

программу почти написал осталось малец - C++
перегрузка операций и ф-ий. Ввести класс для работы с объектом &quot;рациональная дробь&quot;(вида m/n ). Выполнить операции: 1- сложения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.02.2012, 12:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru