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

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

Войти
Регистрация
Восстановить пароль
 
Limb0
 Аватар для Limb0
19 / 19 / 0
Регистрация: 22.01.2012
Сообщений: 88
#1

Странные поведения с float - C++

15.08.2013, 15:58. Просмотров 387. Ответов 8
Метки нет (Все метки)

Здравствуйте, объясните пожайлуста почему при выполеннии этого кода:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
int main ()
{
cout.setf(ios_base::fixed, ios_base::floatfield);
float a=50.25;
float b=11.17;
cout<<a+b;
}
Результат становится не 61.42, а 61.419998?
Также заметил что в Visual studio 2012 если при откладке навести кнопку мышки на переменную чтобы увидеть которое значение в ней храниться то, например, вместо написаного в коде float abc = 2.3 в сплывающем окне будет 2.29999995 , но когда написать float abc = 2.5 тогда в окне будет 2.50000000. Кто-то может сказать почему так происходит.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 16:00     Странные поведения с float #2
Цитата Сообщение от Limb0 Посмотреть сообщение
Результат становится не 61.42
Вообще-то должен быть 61.36
Limb0
 Аватар для Limb0
19 / 19 / 0
Регистрация: 22.01.2012
Сообщений: 88
15.08.2013, 16:03  [ТС]     Странные поведения с float #3
Цитата Сообщение от castaway Посмотреть сообщение
Вообще-то должен быть 61.36
Извиняюсь, опечатка там где 11.11 должно быть 11.17.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 16:07     Странные поведения с float #4
Я знаю что если закомментировать 6-ю строку то вывод будет: 61.42
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
15.08.2013, 16:20     Странные поведения с float #5
Цитата Сообщение от Limb0 Посмотреть сообщение
Кто-то может сказать почему так происходит.
разберитесь для начала что дает установка данных флагов
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17014 / 5419 / 335
Регистрация: 30.03.2009
Сообщений: 14,667
Записей в блоге: 26
15.08.2013, 16:23     Странные поведения с float #6
Цитата Сообщение от Limb0 Посмотреть сообщение
Кто-то может сказать почему так происходит
Истинную причину объяснять долго, потому что слишком много всего нужно понимать. Объяснение на пальцах можно почитать здесь: http://www.cyberforum.ru/blogs/18334/blog88.html

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Я знаю что если закомментировать 6-ю строку то вывод будет: 61.42
Но это только вывод таким будет. Потому что в процессе печати будет производиться округление. Реальное значение, хранимое в качестве результата операции сложения, всё равно будет отличаться от 61.42
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 16:24     Странные поведения с float #7
Цитата Сообщение от Evg Посмотреть сообщение
Но это только вывод таким будет. Потому что в процессе печати будет производиться округление. Реальное значение, хранимое в качестве результата операции сложения, всё равно будет отличаться от 61.42
Тут я с тобой спорить не буду.
Limb0
 Аватар для Limb0
19 / 19 / 0
Регистрация: 22.01.2012
Сообщений: 88
15.08.2013, 20:07  [ТС]     Странные поведения с float #8
Спасибо за ответы.

Добавлено через 3 часа 6 минут
Единственное что я еще не могу понять так это то что в файле float.h написано что под мантису выделено 24 бита то есть 6 цифр. Но при написании такого числа в коде. 993774.5557 На екране отображается: 993774.562500. Куда сохранились цифры 5,6,2,5?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2013, 21:59     Странные поведения с float
Еще ссылки по теме:

C++ Странные ошибки в c++
C++ Пользовательская функция работает не так, как ожидается: найти причины странного поведения функции
C++ Странные символы в консоли с++
Странные символы C++
C++ Не вижу окна с кодом (нет окна редактирования): найти причины странного поведения программы

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17014 / 5419 / 335
Регистрация: 30.03.2009
Сообщений: 14,667
Записей в блоге: 26
15.08.2013, 21:59     Странные поведения с float #9
Цитата Сообщение от Limb0 Посмотреть сообщение
что под мантису выделено 24 бита
24 двоичные цифры. Плавающие числа хранятся в двоичном представлении, а оно выглядит совсем не так, как привычное для тебя десятичное
Yandex
Объявления
15.08.2013, 21:59     Странные поведения с float
Ответ Создать тему
Опции темы

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