C/C++ - деление в c++
-
shisik
Re: C/C++ - деление в c++
Код:
Дело в том, что компилятор воспринимает 5 как целое число int, делит его на другое целое число и получается результат - тоже целое число. И только потом он приводится к типу double:
Код:
Как-то так получается. Для деления с сохранением дробной части нужно 5 привести к типу double до операции деления:
Код:
Или же просто определить в виде дробного числа, как я показал в самом начале.
Код: Выделить всё
double x = 5.0 / 2;Дело в том, что компилятор воспринимает 5 как целое число int, делит его на другое целое число и получается результат - тоже целое число. И только потом он приводится к типу double:
Код:
Код: Выделить всё
double x = double(5 / 2);Как-то так получается. Для деления с сохранением дробной части нужно 5 привести к типу double до операции деления:
Код:
Код: Выделить всё
double x = double(5) / 2;Или же просто определить в виде дробного числа, как я показал в самом начале.
-
sheepang
-
shisik
Re: C/C++ - деление в c++
Цитата sheepang:
выведет тоже 2
Ну конечно! Вы же объявили x целым числом int:
Код:
Объявите его double и всё:
Код:
Цитата sheepang:
a = x*1.0/2;
Это будет работать, но это называется «костыль». Тогда уж правильнее явно привести к double:
Код:
Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале.
выведет тоже 2
C/C++ - деление в c++
Ну конечно! Вы же объявили x целым числом int:
Код:
Код: Выделить всё
int x;Объявите его double и всё:
Код:
Код: Выделить всё
double x;
double a;
cin >> x; //вводится 5
a = x/2;
cout Цитата sheepang:
a = x*1.0/2;
C/C++ - деление в c++
Это будет работать, но это называется «костыль». Тогда уж правильнее явно привести к double:
Код:
Код: Выделить всё
a = double(x) / 2;Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале.
-
sheepang
Re: C/C++ - деление в c++
Цитата shisik:
Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале.
Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае.
Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале.
C/C++ - деление в c++
Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае.
-
shisik
Re: C/C++ - деление в c++
Цитата Iska:
Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае.
Само собой. Если нет возможности сразу объявить как double, можно использовать явное приведение типов:
Код:
Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае.
C/C++ - деление в c++
Само собой. Если нет возможности сразу объявить как double, можно использовать явное приведение типов:
Код:
Код: Выделить всё
a = double(x) / 2;-
User001
Re: C/C++ - деление в c++
Цитата shisik:
можно использовать явное приведение типов
Код:
Пора уже на static_cast(x) / 2 переходить.
можно использовать явное приведение типов
C/C++ - деление в c++
Код:
Код: Выделить всё
a = double(x) / 2;Пора уже на static_cast(x) / 2 переходить.
-
shisik
Re: C/C++ - деление в c++
Цитата User001:
Пора уже на static_cast(x) / 2 переходить.
Разве это не просто «синтаксическая соль»?
Пора уже на static_cast(x) / 2 переходить.
C/C++ - деление в c++
Разве это не просто «синтаксическая соль»?
-
User001
Re: C/C++ - деление в c++
Цитата shisik:
Разве это не просто «синтаксическая соль»?
Не, в C++ при C-style cast работает интересней (можно посмотреть
Разве это не просто «синтаксическая соль»?
C/C++ - деление в c++
Не, в C++ при C-style cast работает интересней (можно посмотреть
сюда
). А практическая ценность - можно отловить часть проблем на этапе компиляции и само приведение на глаза попадается лучше (еще пример
).