Помощь - Поиск - Пользователи - Календарь
Полная версия: Какая-то ошибка.
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
sheka
Как обычно, не знаю как назвать тему wacko.gif
Не мог в программе найти ошибку. Уже построчно проверял. Пришел к таким выводам: или при присвоении числу float числа int оно округляется, чего не может быть в теории, или не правильно printf выводит число float.
Проблема оказалась в том, что результат от таких действий 1/2 или 3/4 или 5/3 округлялся. Для получения правильного результата надо писать 1.0/2.0 и 3.0/4.0 и 5.0/3.0. Объясните, пожалуйста, в чем прикол такой записи и обязательно ли за этим следить?
volvo
Цитата
Объясните, пожалуйста, в чем прикол такой записи и обязательно ли за этим следить?
Прикол в том, что в С/С++ тип результата при делении совпадает с типом более емкого операнда (в отличие от Паскаля, где деление всегда возвращает вещественный результат). То есть, если ты с Сях делишь целое на целое - то в результате выполняется именно целочисленное деление, и частное тоже будет целым. Для того, чтобы получить вещественное число, достаточно привести либо делимое либо делитель к вещественному (оба сразу - можно, но не обязательно):

// можно так, задавая константы вещественного типа:
double res_1 = 1.0 / 2;
// можно - вот так (приведение типов в стиле С):
double res_2 = (double)1 / 2;
// можно сделать то же самое, но в стиле С++:
double res_3 = static_cast<double>(1) / 2;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.