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

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

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

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

15.08.2013, 15:58. Просмотров 399. Ответов 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. Кто-то может сказать почему так происходит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2013, 15:58     Странные поведения с float
Посмотрите здесь:

Странности поведения матриц - C++
При реализации класса матриц магия C++ проявила себя уже на сложении. При сложении каким-то образом портится правый операнд (внутренняя...

решить систему... и иследование поведения функции - C++
Требования к выполнению задания №1: 1. Требуется решить систему линейных алгебраических систем уравнений четвертого порядка методом...

Пользовательская функция работает не так, как ожидается: найти причины странного поведения функции - C++
Ребята помогите, пожалуйста. Создаю функцию суммы дробных чисел, но она ничего не возвращает, экран пустой. Я знаю, что туплю, но все же. ...

Странные ошибки в c++ - C++
Добрый день! Помогите пожалуйста, что это за ошибки такие?Что можно сделать? П.5.18.Правил Запрещено размещать задания и решения в...

Странные символы - C++
Нужно заменить символ 'd' на символ 'в'. Сделал такой командой: &quot;s1 = s1-&gt;Replace('d', 'в');&quot;, НО вместо 'в' показывается ¬. И так со...

Странные ситуации - C++
У меня вот такая проблема. Если я компилирую и запускаю консольное приложение в visual studio 2010, с некоторой долей вероятности( ~5%),...

Странные ошибки - C++
Здравствуйте! У меня есть такой код: class StringParser { private: char* str; char* seperators; int position; public: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 16:00     Странные поведения с float #2
Цитата Сообщение от Limb0 Посмотреть сообщение
Результат становится не 61.42
Вообще-то должен быть 61.36
Limb0
19 / 19 / 0
Регистрация: 22.01.2012
Сообщений: 88
15.08.2013, 16:03  [ТС]     Странные поведения с float #3
Цитата Сообщение от castaway Посмотреть сообщение
Вообще-то должен быть 61.36
Извиняюсь, опечатка там где 11.11 должно быть 11.17.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
17527 / 5765 / 368
Регистрация: 30.03.2009
Сообщений: 15,852
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 16:24     Странные поведения с float #7
Цитата Сообщение от Evg Посмотреть сообщение
Но это только вывод таким будет. Потому что в процессе печати будет производиться округление. Реальное значение, хранимое в качестве результата операции сложения, всё равно будет отличаться от 61.42
Тут я с тобой спорить не буду.
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++
Всем добрый день. Хотелось бы узнать ответы на 2 вопроса: 1. Шаблонный тип - тип использующийся как шаблон для нескольких типов, а...

Странные символы в консоли с++ - C++
Доброго времени суток!Подскажите пожалуйста по одному вопросу. Столкнулся с символом мелодии в консоли : запустил, ввел данные и на экран...

Странные результаты деления - C++
//Обнаружил странное исполнение функции деления в CodeBlocks 13.12 #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; ...

цикл while,странные результат - C++
int main(){ long int l=0; short int s=0; cin&gt;&gt;l; cin&gt;&gt;s; const int max=65535; while(s&lt;l&amp;&amp;l&gt;0&amp;&amp;s&lt;max) { ...

Странные ошибки в функции - C++
#include &lt;iostream&gt; using namespace std; struct times { int hours; int minutes; int seconds; char...


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

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

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