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

float x=0.2 Чему равно х? - C++

Восстановить пароль Регистрация
 
Яна_Max
3 / 3 / 0
Регистрация: 08.11.2011
Сообщений: 137
14.12.2012, 22:13     float x=0.2 Чему равно х? #1
Угадай результат:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
 
  float a=0.2;
  if(a==0.2)
  cout<<"da";
  else cout<<"no a="<<a;
 
  getch();
  return 0;
}
no a=0.2

КАК??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 22:13     float x=0.2 Чему равно х?
Посмотрите здесь:

C++ Чему равно значение d в следующем перечислении: еnum { а, b=3, с=5, d };
Найти чему равно C++
C++ Присвоить значению d название дня недели в зависимости от того чему оно равно
C++ Чему будет равно a после выполнения следующего фрагмента программы в строке // 1 ?
C++ Чему будет равно значение переменной s после выполнения следующего фрагмента программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,039
14.12.2012, 22:15     float x=0.2 Чему равно х? #2
Цитата Сообщение от Яна_Max Посмотреть сообщение
if(a==0.2)
не сравнивают так плавающие
погрешность нужно учитывать
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
14.12.2012, 22:20     float x=0.2 Чему равно х? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
 
  double a= 0.2;
  if(a==0.2) {
  cout<<"da";
  }
  else {cout<<"no a="<<a;}
 
  getch();
  return 0;
}
P.S. Тип double - лучший тип с плавающей точкой !!!
Яна_Max
3 / 3 / 0
Регистрация: 08.11.2011
Сообщений: 137
14.12.2012, 22:22  [ТС]     float x=0.2 Чему равно х? #4
С double пробовала, после того, как получила "no.." Просто стало интересно очень. Всем спасибо! =)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 22:23     float x=0.2 Чему равно х? #5
Яна_Max, нужно сравнивать с какой-то точностью.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
14.12.2012, 22:24     float x=0.2 Чему равно х? #6
Цитата Сообщение от Яна_Max Посмотреть сообщение
А это долго, простите? =)
Используй не float, а double. Он больше может вместить значений; с ним меньше проблем. Напримет, твоя проблема была решена)
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,039
14.12.2012, 22:28     float x=0.2 Чему равно х? #7
Цитата Сообщение от sovaz1997 Посмотреть сообщение
P.S. Тип double - лучший тип с плавающей точкой !!!
он не лучше и не хуже он другой
памяти дубль занимает в два раза больше чем флоат
и с ним тоже возможны эти косяки
невозможно некоторые дроби представить в двоичном виде в виде конечной дроби
посему такое сравнение
C++
1
2
double x=2.0/10;
 if( x==0.2)
некорректно, тем более если куча вычислений и ошибка может накапливаться.

вот как правильно сравнивать
C++
1
if(fabs(x-0.2)< 0.0001)
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
14.12.2012, 22:30     float x=0.2 Чему равно х? #8
Цитата Сообщение от ValeryS Посмотреть сообщение
он не лучше и не хуже он другой
Для памяти да. Для точности нет. Спасибо за совет

Не по теме:

Почему не у всех есть кнопка Спасибо

ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,039
14.12.2012, 22:34     float x=0.2 Чему равно х? #9
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Используй не float, а double. Он больше может вместить значений; с ним меньше проблем. Напримет, твоя проблема была решена)
её проблема будет решена не потому что double
а потому что сравниваются два типа
C++
1
if(a==0.2)
здесь a-float, 0.2-double
при сравнении float преобразуется к double ( со своими огрехами ) вот и не равны
можно было так написать
C++
1
if(a==(float)0.2)
и сработало бы
но это костыли которые могут отвалится в любой момент
и спутник полетит в другую сторону
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
14.12.2012, 22:37     float x=0.2 Чему равно х? #10
ValeryS, тогда уж
C++
1
if(a==0.2f)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2012, 22:40     float x=0.2 Чему равно х?
Еще ссылки по теме:

Чему будет равно значение переменной z после выполнения следующего фрагмента программы? C++
C++ Чему будет равно значение выражения после выполнения операторов?
Чему равно а? C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,039
14.12.2012, 22:40     float x=0.2 Чему равно х? #11
Цитата Сообщение от I.M. Посмотреть сообщение
ValeryS, тогда уж
ну можно и так
хотя здесь
Цитата Сообщение от Яна_Max Посмотреть сообщение
float a=0.2;
тоже нужно писать
C++
1
float a=0.2f;
ведь здесь тоже конвертация идет
или нет? чейто я в этих тонкостях запутался
Yandex
Объявления
14.12.2012, 22:40     float x=0.2 Чему равно х?
Ответ Создать тему
Опции темы

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