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

C++

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

Как работает сравнение float/double (IEEE 754) - C++

27.11.2014, 18:16. Просмотров 737. Ответов 0
Метки нет (Все метки)

Возможно нубский вопрос.
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    double a, b, x, res;
    bool f;
    a = 0.5;
    b = 0.3;
    res = a + b;
    x = 0.8;
    f = res == x;
    return 0;
}
Т.е тупо сравниваем сравниваем результат сложения 0.3+0.5 и 0.8

Вот так VS2013 показывает предствление всех переменных.

Посмотрел в этой программе точное представление и вот что увидел (после дефиса - число, восстановленное из double):
0.5 - 0.5
0.3 - 0,299999999999999988897769753748434595763683319091796875
0.8 - 0,8000000000000000444089209850062616169452667236328125

т.е сумма должна давать 0.799999999999999988897769753748434595763683319091796875

Вопрос - как получилось, что f и res равны 0.80000000000000004 ?

Добавлено через 3 часа 19 минут
Туплю...
Если положить 0.799999999999999988897769753748434595763683319091796875 в double, то как раз получится ~0.80000000000000004

Добавлено через 6 минут
Другой вопрос:
почему выводится 17 знаков после запятой? Тут написано, что точность 15.9 знаков, т.е 16 должно хватать в любом случае?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2014, 18:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как работает сравнение float/double (IEEE 754) (C++):

Число 65,41 представлено у форматі чисел із плаваючою крапкою стандарту IEEE 754 з одинарною точністю - C++
Число 65,41 представлено у форматі чисел із плаваючою крапкою стандарту IEEE 754 з одинарною точністю. Наведіть двійкове подання експоненти...

Казусы с double и float при преобразовании в string - C++ Builder
Всем привет. Хотелось бы узнать почему когда выполняю такой код: void __fastcall TForm1::Chart1MouseMove(TObject *Sender, TShiftState...

Нужна компонента: что-то типа StringGrid, но значения ячеек должны иметь тип числа (float, double и т.д.) - C++ Builder
Уважаемые дамы и господа! Если у кого-то есть, или кто-то знает где можно взять компоненту под билдер: что-то типа StringGrid, но...

Сравнение строк. If работает не так, как предполагается - C++ Builder
Добрые люди) спасите и помогите. Разбила уже код как только могла. При вводе любого числа выдает ошибку, так как в процедуре...

Float в int или double в int - C++ Builder
Надо прибавить в Shape1->Top+=0,33, но когда перевожу в int то он округляет до нуля, чего быть не должно, как это реализовать?

Шаблоны, не работает с float - C++ Builder
Ребят, сделала шаблоны под свой класс. //--------------------------------------------------------------------------- #include...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2014, 18:16
Привет! Вот еще темы с ответами:

Too few parametrs in call to '_fastcall LogN(cont log double, const long double)' - C++ Builder
void __fastcall TForm1::Button1Click(TObject *Sender) {int n; double y,a=1.5,b=0.7,z=3.2,x=StrToFloat(Edit1->Text); ...

На вин 7 не работает сравнение времени - C++ Builder
Всем привет! Стоит программка на вин 2003 сервер, одна из функций в ней сравнение времени. Перенес программу на вин 7 32 бит - ...

Ошибка e2015 ambiguity between(double,double) в функции - C++ Builder
Функция: void gmdh1() ; { double poly; double work; unsigned short int ind; unsigned short int ma; double rms; double ww,...

Подсчет разности чисел в формате double IEEE 754 - Assembler
Доброго времени суток. Написал программу, которая должна считать разность двух чисел введеных в 16 системе счисления в формате double IEEE...


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

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

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