![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Kefir |
|
||||||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
Есть мега-сложная программа, вот её полный код:
Мега-большой файл floats.txt:
В результате программа мне выдаёт замечательное число:
собственно говоря вопрос - где суть?! Почему такое странное число получается? Компилировал на g++ и Visual C++ 6.0 - результат один и тот же. |
||||||
|
|||||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
так лечиться
|
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
Если не сложно - объясни мне глупцу, почему так происходит? почему 7.2f (а не 9.4f или 12.84f)? Или дай, пожалуйста, ссылку на то, где об этом можно почитать (почему-то я из манов по scanf/fscanf этого не нашёл).
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
Kefir, printf
|
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
и ещё - мне же надо всякие опрации с такими числами делать (конкретно - надо считать 12 float'ов и поизеваться над ними). Но с такими странными значениями никакой точности же нет! Как сделать так чтобы переменные реально содержали, например 12345.1200000??
|
|||
|
||||
| Romikgy |
|
||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
таково представление чисел с плавающей точкой в двоичном коде Добавлено @ 09:22 Kefir, заюзай double
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||
|
|||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
Romikgy, ок. вроде помогло... а вообще, странно всё это... приходится изобретать workaround'ы вместо того, что юзать стандартную функцию...
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
что есть это ? имхо страдают малой точностью , хотя и не все -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
это "через попу к солнцу" - решение проблемы (нестандартными методами), возникшей из-за неправильного действия функции предназначенной для выполнения требуемой операции. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
круто завернул -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
кто мешает читать в double scanf? Просто добавть к формату модификатор l:
И, действительно, не используй float - там точность малая... -------------------- ... |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
Earnest, чёрт.... тут Kefir понял насколько он несообразителен...
Добавлено @ 11:17 Кстати, тема закрыта |
|||
|
||||
| Мяут |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 11.10.2006 Репутация: нет Всего: нет |
ничего, что в закрытую тему?
Kefir, вещественные типы в C/C++ не обеспечивают абсолютной точности и дело вовсе не в printf или scanf, а в особенностях представления чисел в компьютере. Поэтому реальное значение лежит в пределах: r = f+-std::numeric_limits<float>::epsilon(); С double такая же проблема. К тому же возможны ошибки при сравнении. Потому сравнивать вещественные числа нужно через разность:
Удачи! Это сообщение отредактировал(а) Мяут - 11.10.2006, 12:43 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |