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

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

Восстановить пароль Регистрация
 
Limb0
 Аватар для Limb0
19 / 19 / 0
Регистрация: 22.01.2012
Сообщений: 88
15.08.2013, 15:58     Странные поведения с float #1
Здравствуйте, объясните пожайлуста почему при выполеннии этого кода:
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. Кто-то может сказать почему так происходит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2013, 15:58     Странные поведения с float
Посмотрите здесь:

C++ Ошибка cannot convert 'float' to 'float*'
C++ решить систему... и иследование поведения функции
C++ Странные ошибки
invalid types `float[float]' for array subscript C++
cannot convert `float' to `float*. Почему так происходит? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 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
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 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
Эксперт С++Автор FAQ
 Аватар для Evg
16830 / 5251 / 322
Регистрация: 30.03.2009
Сообщений: 14,144
Записей в блоге: 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
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 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++ Чем отличаются float преобразования (float)var от float(var)
Странные ситуации C++

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

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

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