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

Приведение типов - C++

Восстановить пароль Регистрация
 
Etete
0 / 0 / 1
Регистрация: 27.12.2010
Сообщений: 40
02.12.2012, 22:29     Приведение типов #1
При вводе с клавиатуры s = 11 и a = 1.1, получаем 9.
Результат переменной d = 10, это правильно. В чём подвох?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    double s;
    double a;
    cin >> s >> a;
    int c = s/a;
    int d = 11/1.1;
 
    cout << c << endl;
    cout << d << endl;
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 22:29     Приведение типов
Посмотрите здесь:

C++ Приведение типов
Приведение типов. C++
Приведение типов C++
Приведение типов C++
C++ Приведение типов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Boshop
13 / 13 / 0
Регистрация: 25.09.2012
Сообщений: 122
02.12.2012, 22:43     Приведение типов #2
Скомпилировал твой код в обоих случаях 10. Может у тебя с компилятором что то не то?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
02.12.2012, 22:45     Приведение типов #3
В VS2012 ошибка не воспроизводится
скорее всего, происходит следующее:
s/a выдает 9.999999...
а затем это число ошибочно переводится в 9, отбрасывая при этом дробную часть
Etete
0 / 0 / 1
Регистрация: 27.12.2010
Сообщений: 40
02.12.2012, 22:46  [ТС]     Приведение типов #4
А чего он выводит 9.99999, раз тут нацело делится?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
02.12.2012, 22:48     Приведение типов #5
Etete, double в памяти обычно хранится не точно, а с погрешностью Поэтому даже 11, это и не 11 вовсе, а, например, 11.0000001

Добавлено через 41 секунду
В любом случае, программа не должна возвращать 9 в этом примере
Etete
0 / 0 / 1
Регистрация: 27.12.2010
Сообщений: 40
02.12.2012, 22:52  [ТС]     Приведение типов #6
int отсекает значит остальные девятки, т.к если у d тип double, при вычислении = 10.
Yandex
Объявления
02.12.2012, 22:52     Приведение типов
Ответ Создать тему
Опции темы

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