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

Непонятка со скобками - C++

Восстановить пароль Регистрация
 
Зеленый1
 Аватар для Зеленый1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 100
19.02.2012, 12:58     Непонятка со скобками #1
У меня такой вопрос: есть два куска кода, по сути одинаковых, в одном есть дополнительные скобки, которые по-моему не влияют ни на что, но результат получается разный. Прикрепил два скрина, может кто объянит, просто интересно в чем оказалась проблема))
Миниатюры
Непонятка со скобками   Непонятка со скобками  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2012, 12:58     Непонятка со скобками
Посмотрите здесь:

fstream непонятка C++
непонятка с минусами в double C++
C++ непонятка
Непонятка с заголовочными файлами C++
C++ Непонятка с кодировкой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 14:31     Непонятка со скобками #2
C математической точки зрения разницы нет! ну по крайней мере я не заметил!

Значение переменных у Вас одинаковы в обоих примерах??
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.02.2012, 14:45     Непонятка со скобками #3
C++
1
2
3
4
5
6
7
8
9
  const double d = 5;
  const int i1 = 5;
  const int i2 = 2;
 
  const double res1 = d * i1 / i2;
  const double res2 = d * (i1 / i2);
 
  cout << res1 << endl; // 12.5
  cout << res2 << endl; // 10.0
В случае без скобочек порядок выполнения такой:
переменная типа дабл умножается на переменную типа инт. результат - значение типа дабл. потом дабл делится на инт.
5 * 5 / 2 = 12.5

Во втором случае сперва вычисляется выражение в скобках:
переменная типа инт делится на переменную типа инт. результат выражение - интовое значение.
т.е. 5 / 2 = 2 т.к. интовые значение - это целые числа.
далее дабл умножается на этот результат, т.е. 5 * 2 = 10;

Вот в вашем примере тоже самое. Все переменные, которые взяли в дополнительные скобки похоже имеют тип инт. Отсюда погрешность при целочисленной арифметике.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
19.02.2012, 14:51     Непонятка со скобками #4
Del, пропустил скобку
Зеленый1
 Аватар для Зеленый1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 100
19.02.2012, 17:19  [ТС]     Непонятка со скобками #5
DU, благодарю за пояснение, теперь все ясно!)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2012, 17:23     Непонятка со скобками #6
Цитата Сообщение от Infinity3000 Посмотреть сообщение
Значение переменных у Вас одинаковы в обоих примерах??
Дело не в них, надо проверить типы, так как от перестановки операции округления результат меняется:
2*1.4+2*1.8=2*1+2*1=2+2=4, 2*(1.4+1.8)=2*(3.2)=2*3.2=2*3=6.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 17:28     Непонятка со скобками
Еще ссылки по теме:

C++ Непонятка с указателями
непонятка в связном списке C++
Непонятка с float C++

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

Или воспользуйтесь поиском по форуму:
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 17:28     Непонятка со скобками #7
Цитата Сообщение от taras atavin Посмотреть сообщение
Дело не в них, надо проверить типы
Думал. что ТС это учел!
Yandex
Объявления
19.02.2012, 17:28     Непонятка со скобками
Ответ Создать тему
Опции темы

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