Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
4 / 4 / 0
Регистрация: 08.11.2011
Сообщений: 137
1

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

14.12.2012, 22:13. Показов 2158. Ответов 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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2012, 22:13
Ответы с готовыми решениями:

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

чему равно n и p?
int x={0,2,4,6}, *p, n; p=&amp;x; n=*p++;

чему равно pDO[0]?
int *pDat, *pDO, Date=2003, DateOld=1997; pDO=&amp;DateOld; pDat=pDo; pDO=NULL;

Найти чему равно
вот такое деление. Не могу написать программку, получается не правильное число. Число должно...

10
Модератор
Эксперт по электронике
8494 / 6320 / 855
Регистрация: 14.02.2011
Сообщений: 21,909
14.12.2012, 22:15 2
Цитата Сообщение от Яна_Max Посмотреть сообщение
if(a==0.2)
не сравнивают так плавающие
погрешность нужно учитывать
1
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 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
4 / 4 / 0
Регистрация: 08.11.2011
Сообщений: 137
14.12.2012, 22:22  [ТС] 4
С double пробовала, после того, как получила "no.." Просто стало интересно очень. Всем спасибо! =)
0
go
Эксперт С++
3643 / 1375 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
14.12.2012, 22:23 5
Яна_Max, нужно сравнивать с какой-то точностью.
1
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
14.12.2012, 22:24 6
Цитата Сообщение от Яна_Max Посмотреть сообщение
А это долго, простите? =)
Используй не float, а double. Он больше может вместить значений; с ним меньше проблем. Напримет, твоя проблема была решена)
1
Модератор
Эксперт по электронике
8494 / 6320 / 855
Регистрация: 14.02.2011
Сообщений: 21,909
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
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
14.12.2012, 22:30 8
Цитата Сообщение от ValeryS Посмотреть сообщение
он не лучше и не хуже он другой
Для памяти да. Для точности нет. Спасибо за совет

Не по теме:

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

0
Модератор
Эксперт по электронике
8494 / 6320 / 855
Регистрация: 14.02.2011
Сообщений: 21,909
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
572 / 555 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
14.12.2012, 22:37 10
ValeryS, тогда уж
C++
1
if(a==0.2f)
1
Модератор
Эксперт по электронике
8494 / 6320 / 855
Регистрация: 14.02.2011
Сообщений: 21,909
14.12.2012, 22:40 11
Цитата Сообщение от I.M. Посмотреть сообщение
ValeryS, тогда уж
ну можно и так
хотя здесь
Цитата Сообщение от Яна_Max Посмотреть сообщение
float a=0.2;
тоже нужно писать
C++
1
float a=0.2f;
ведь здесь тоже конвертация идет
или нет? чейто я в этих тонкостях запутался
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2012, 22:40

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

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

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

Чему будет равно a после выполнения следующего фрагмента программы в строке // 1 ?
Чему будет равно a после выполнения следующего фрагмента программы в строке // 1 ? int a = 0; ...


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

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

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