C/C++ - деление в c++

Аватара пользователя
shisik

Re: C/C++ - деление в c++

Сообщение shisik »

Код:

Код: Выделить всё

double x = 5.0 / 2;

Дело в том, что компилятор воспринимает 5 как целое число int, делит его на другое целое число и получается результат - тоже целое число. И только потом он приводится к типу double:





Код:

Код: Выделить всё

double x = double(5 / 2);

Как-то так получается. Для деления с сохранением дробной части нужно 5 привести к типу double до операции деления:





Код:

Код: Выделить всё

double x = double(5) / 2;

Или же просто определить в виде дробного числа, как я показал в самом начале.
Аватара пользователя
sheepang

Re: C/C++ - деление в c++

Сообщение sheepang »

спасибо



а допустим

int x;

double a;

cin >> x; вводится 5

a = x/2;

cout
Аватара пользователя
shisik

Re: C/C++ - деление в c++

Сообщение shisik »

Цитата sheepang:



выведет тоже 2
C/C++ - деление в c++




Ну конечно! Вы же объявили x целым числом int:





Код:

Объявите его 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++

Сообщение sheepang »

Цитата shisik:



Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале.
C/C++ - деление в c++




Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае.
Аватара пользователя
shisik

Re: C/C++ - деление в c++

Сообщение shisik »

Цитата Iska:



Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае.
C/C++ - деление в c++




Само собой. Если нет возможности сразу объявить как double, можно использовать явное приведение типов:





Код:

Код: Выделить всё

a = double(x) / 2;
Аватара пользователя
User001

Re: C/C++ - деление в c++

Сообщение User001 »

Цитата shisik:



можно использовать явное приведение типов
C/C++ - деление в c++


Код:

Код: Выделить всё

a = double(x) / 2;





Пора уже на static_cast(x) / 2 переходить.
Аватара пользователя
shisik

Re: C/C++ - деление в c++

Сообщение shisik »

Цитата User001:



Пора уже на static_cast(x) / 2 переходить.
C/C++ - деление в c++




Разве это не просто «синтаксическая соль»?
Аватара пользователя
User001

Re: C/C++ - деление в c++

Сообщение User001 »

Цитата shisik:



Разве это не просто «синтаксическая соль»?
C/C++ - деление в c++




Не, в C++ при C-style cast работает интересней (можно посмотреть
сюда
). А практическая ценность - можно отловить часть проблем на этапе компиляции и само приведение на глаза попадается лучше (еще
пример
).
Ответить

Вернуться в «Программирование и базы данных»