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

Дурацкое окргуление - C++

Восстановить пароль Регистрация
 
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,508
16.04.2012, 15:54     Дурацкое окргуление #1
Почему возникает эта проблема?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    double x=0.3;
    int y=600;
    int z;
    double d;
    d= x*y; //180
    z= d;//180
    z= x*y;//179
    z= (d= x*y);//179, но как же блин, сначала ведь присваивание идёт d, а потом z!!!
    cout<<x*y;//180
}
Нелогично же всё считается до ужаса, но почему именно так?
(Меня вопрос как это обхитрить не интересует, также меня не интересует то что по какому-то там канону int переменной присваивать значение double переменной нельзя так как усечение и всё такое. Меня интересует почему всё работает именно так ).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
16.04.2012, 16:26     Дурацкое окргуление #2
потому что в результате вычислений образуются числа с бесконечной мантиссой, которую невозможно записать в 8 байт
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,508
16.04.2012, 17:18  [ТС]     Дурацкое окргуление #3
DeadRipper, да я понимаю что там получается "бесконечное число". Почему всё работает так странно то - вот в чём вопрос.
Особенно меня интересует строка 11, которая вообще не поддаётся логике.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
18.04.2012, 02:50     Дурацкое окргуление #4
output:
C++
1
2
z= x*y;  -> 180
z= (d= x*y) - > 180
TECT
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
18.04.2012, 03:04     Дурацкое окргуление #5
Аналогично, на GCC 4.7.0 во всех случаях выводит 180. Возможно зависит от аппаратной платформы?
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
18.04.2012, 03:24     Дурацкое окргуление #6
mсvs 2010 аналогично везде 180.
какая платформа, компилятор и оптимизации?
CLOH
 Аватар для CLOH
5 / 5 / 3
Регистрация: 30.12.2010
Сообщений: 40
18.04.2012, 11:42     Дурацкое окргуление #7
В С++ Builder 6:

180
180
179
179
180


OC(windows xp)
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,508
18.04.2012, 19:35  [ТС]     Дурацкое окргуление #8
minigw у меня, ну и g++ которому сдавал на сервере тоже так же само себя вёл и браковал мои расчёты.
Yandex
Объявления
18.04.2012, 19:35     Дурацкое окргуление
Ответ Создать тему
Опции темы

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