С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

15.08.2013, 15:58. Просмотров 416. Ответов 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. Кто-то может сказать почему так происходит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2013, 15:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странные поведения с float (C++):

опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing - C++
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; float f1(float x)/*vira*enie 1*/ {return (x*cos(x))/(1+ pow(x,2));} ...

Чем отличаются float преобразования (float)var от float(var) - C++
Здравствуйте! Подскажите, чем отличается (float)var от float(var)

cannot convert `float' to `float*. Почему так происходит? - C++
всем привет, помогите исправить ошибки... а то голова мало варит уже, а завтра надо сдать уже #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

invalid types `float[float]' for array subscript - C++
void SEARCH(float vol, float price, int i) { if (i&gt;N) { if(price&gt;maxprice) { ...

неверное приведение void* к *float а далее к float - C++
Почему когда привожу void* к int* потом к int то все работает, данные не бьются и работают нормально, когда делаю те же операции но с...

Ошибка cannot convert 'float' to 'float*' - C++
Здравствуйте, что означает error: cannot convert 'float' to 'float*' for argument '1' to 'int mas_time(float*, int)'? Из-за чего она...

8
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 16:00 #2
Цитата Сообщение от Limb0 Посмотреть сообщение
Результат становится не 61.42
Вообще-то должен быть 61.36
0
Limb0
19 / 19 / 0
Регистрация: 22.01.2012
Сообщений: 88
15.08.2013, 16:03  [ТС] #3
Цитата Сообщение от castaway Посмотреть сообщение
Вообще-то должен быть 61.36
Извиняюсь, опечатка там где 11.11 должно быть 11.17.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
15.08.2013, 16:07 #4
Я знаю что если закомментировать 6-ю строку то вывод будет: 61.42
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
15.08.2013, 16:20 #5
Цитата Сообщение от Limb0 Посмотреть сообщение
Кто-то может сказать почему так происходит.
разберитесь для начала что дает установка данных флагов
0
Evg
Эксперт CАвтор FAQ
18383 / 6431 / 441
Регистрация: 30.03.2009
Сообщений: 17,853
Записей в блоге: 28
15.08.2013, 16:23 #6
Цитата Сообщение от Limb0 Посмотреть сообщение
Кто-то может сказать почему так происходит
Истинную причину объяснять долго, потому что слишком много всего нужно понимать. Объяснение на пальцах можно почитать здесь: http://www.cyberforum.ru/blogs/18334/blog88.html

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

Добавлено через 3 часа 6 минут
Единственное что я еще не могу понять так это то что в файле float.h написано что под мантису выделено 24 бита то есть 6 цифр. Но при написании такого числа в коде. 993774.5557 На екране отображается: 993774.562500. Куда сохранились цифры 5,6,2,5?
0
Evg
Эксперт CАвтор FAQ
18383 / 6431 / 441
Регистрация: 30.03.2009
Сообщений: 17,853
Записей в блоге: 28
15.08.2013, 21:59 #9
Цитата Сообщение от Limb0 Посмотреть сообщение
что под мантису выделено 24 бита
24 двоичные цифры. Плавающие числа хранятся в двоичном представлении, а оно выглядит совсем не так, как привычное для тебя десятичное
0
15.08.2013, 21:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2013, 21:59
Привет! Вот еще темы с ответами:

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

ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int) - C++
Какая то проблема с указателями,незнаю,не хочет щитать суму парних чисел в второй подпрограме.Извиниет за ошибки.Не владею руским.Помогите...

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

"Значение типа float* нельзя использовать для инициализации сущности типа float" - C++
#include &lt;math.h&gt; #include&lt;iostream&gt; #include &lt;iomanip&gt; #include&lt;conio.h&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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