LINUX.ORG.RU

C++ преобразование типов


0

0

Ситуация такая double real, a, b; a = 0; b = 10; real = (1/3)*(-(a*a*a)+(b*b*b));

и в отладчике видим, что real = 0;

А если так

real = -(a*a*a)/3+(b*b*b)/3;

то real = 333.3

Интересно почему это он так себя ведёт. Пару раз сталкивался с этим на gnu'шном компиляторе. Это компилятор или что-то ещё?


(1/3) это 0 (поскольку числа целые). А далее не важно, на что там умножать.

svu ★★★★★
()
Ответ на: комментарий от smh

Мда. 7 лет пишу на нём. Мог бы и сам догадаться, что вычисляя (1/3) он приведёт к наибольшему типу, т.е к int. Хотя мне бы хотелось, чтобы он приводил к наибольшему типу из всех, встреченных в выражении.

Всем спасибо. Проблема исчерпана.

zerone
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.