Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Округление дробных чисел в printf() |
Автор: Pete 20.11.2008, 01:11 | ||||
Output: 3.00 33.01
Output: 3.01 33.01 Что происходит?? ![]() |
Автор: vinter 20.11.2008, 07:43 |
читай про представление вещественных чисел в компьютере. |
Автор: Pete 20.11.2008, 12:43 |
По-моему, вопрос более конкретный. С чем связана разница поведения? В качестве какого типа трактуется константа без модификатора длины? |
Автор: Pete 21.11.2008, 00:02 | ||||
$ man 3 printf
Т.е. %f используется для double. Почему же тогда округление производится неправильно?
Что значит "фиговее"? Указанная точность влезает в любой встроенный тип с плавающей точкой. А повышающее приведение типов всегда безопасно. |
Автор: J0ker 21.11.2008, 00:19 | ||||
а где тут опасность? было 3.005000000000001 стало 3.00499999999999999999999999999999999999999999 |
Автор: Mayk 21.11.2008, 11:53 | ||||
Осталось лишь понять что ты повысил в случае с 3.005f.
3.0049999999999999000000000 3.0050001144409180000000000
Что значит "указанная точность"? Было во флоате 3.0050001144409180000000000, стало в дабле 3.0050001144409180000000000. double стерпит. Хотя 3.0049999999999999000000000 в дабле гораздо ближе к 3.005. |
Автор: Pete 21.11.2008, 17:21 |
Понял. Всем спасибо! ![]() |