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

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

Войти
Регистрация
Восстановить пароль
 
Яна_Max
3 / 3 / 0
Регистрация: 08.11.2011
Сообщений: 137
#1

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

14.12.2012, 22:13. Просмотров 763. Ответов 10
Метки нет (Все метки)

Угадай результат:

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

КАК??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 22:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос float x=0.2 Чему равно х? (C++):

Чему равно а? - C++
int a; a = 'a' &lt; 'b' &lt; 'c' - 'c' &gt;&gt; 1 % ('b' - 'a');

Найти чему равно - C++
вот такое деление. Не могу написать программку, получается не правильное число. Число должно равняться числу 0,761597. Помогите разобраться.

Чему равно значение переменной d? - C++
int a = 5, b = 6, c = 7, d: d = (b ++- ( --c)) + (b + a--);

Чему равно значение d в следующем перечислении: еnum { а, b=3, с=5, d }; - C++
Чему равно значение d в следующем перечислении: еnum { а, b=3, с=5, d };

Чему будет равно значение выражения после выполнения операторов? - C++
1. Чему будет равно значение выражения после выполнения операторов C++: 123 &amp; 321? 2. Чему равно значение выражения после выполнения...

Чему будет равно a после выполнения следующего фрагмента программы в строке // 1 ? - C++
Чему будет равно a после выполнения следующего фрагмента программы в строке // 1 ? int a = 0; for (;;) { if (a) break; a--; ...

10
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
14.12.2012, 22:15 #2
Цитата Сообщение от Яна_Max Посмотреть сообщение
if(a==0.2)
не сравнивают так плавающие
погрешность нужно учитывать
1
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
14.12.2012, 22:20 #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 - лучший тип с плавающей точкой !!!
1
Яна_Max
3 / 3 / 0
Регистрация: 08.11.2011
Сообщений: 137
14.12.2012, 22:22  [ТС] #4
С double пробовала, после того, как получила "no.." Просто стало интересно очень. Всем спасибо! =)
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 22:23 #5
Яна_Max, нужно сравнивать с какой-то точностью.
1
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
14.12.2012, 22:24 #6
Цитата Сообщение от Яна_Max Посмотреть сообщение
А это долго, простите? =)
Используй не float, а double. Он больше может вместить значений; с ним меньше проблем. Напримет, твоя проблема была решена)
1
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
14.12.2012, 22:28 #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)
2
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
14.12.2012, 22:30 #8
Цитата Сообщение от ValeryS Посмотреть сообщение
он не лучше и не хуже он другой
Для памяти да. Для точности нет. Спасибо за совет

Не по теме:

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

0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
14.12.2012, 22:34 #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)
и сработало бы
но это костыли которые могут отвалится в любой момент
и спутник полетит в другую сторону
1
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
14.12.2012, 22:37 #10
ValeryS, тогда уж
C++
1
if(a==0.2f)
1
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
14.12.2012, 22:40 #11
Цитата Сообщение от I.M. Посмотреть сообщение
ValeryS, тогда уж
ну можно и так
хотя здесь
Цитата Сообщение от Яна_Max Посмотреть сообщение
float a=0.2;
тоже нужно писать
C++
1
float a=0.2f;
ведь здесь тоже конвертация идет
или нет? чейто я в этих тонкостях запутался
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2012, 22:40
Привет! Вот еще темы с ответами:

Нюансы использования препроцессора и макросов: чему будет равно значение переменной a? - C++
Чему будет равно значение переменной a? #define square(x) (x * x) int b = square(2.5); int a = square(2 + b);

Чему будет равно значение переменной z после выполнения следующего фрагмента программы? - C++
Пожалуйста, очень прошу помогите с тестами(( 1)Чему будет равно значение переменной z после выполнения следующего фрагмента программы при...

Чему будет равно значение переменной s после выполнения следующего фрагмента программы - C++
Очень прошу помогите решить!!!! 1) Чему будет равно значение переменной s после выполнения следующего фрагмента программы при...

Присвоить значению d название дня недели в зависимости от того чему оно равно - C++
Как в приведенном коде присвоить значению d название дня недели в зависимости от того чему оно равно, а оно изменяется от 1 до 7 считать...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
14.12.2012, 22:40
Ответ Создать тему
Опции темы

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