|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.08.2012, 18:43 | #1 |
Пользователь
Регистрация: 11.02.2009
Сообщений: 29
|
Проблема с преобразоварнием double в int
Доброго времени суток. Есть функция которая вычисляет длину строки (в символах) которая выводится в консоль при отправки туда чисел с плавающей точкой, но вот проблема: при вычислении длины дробной части функция работает неправильно! Принцип по которому она должна работать следующий:
Ну и в конце если дробная часть не равна нулю прибавляем единицу чтобы учесть десятичную точку (как не странно это тоже символ ). Только вот в шаге 2 происходят какие-то проблемы с static_cast<long int>(fractional_part), я ввожу в программу число 0.13 и больше ничего, но как видно на скриншоте программа при отнимании от трёх три получает не 0, а 4.44089e-016. Откуда берутся эти мелкие остатки непонятно может кто подскажет что-то дельное? Ах да, забыл добавить функция debug::v(type , const char *), просто выводит переменную типа type, под именем которое предаётся с помощью второго аргумента const char *. Вот исходный код: Код:
Последний раз редактировалось Theseus; 16.08.2012 в 18:51. |
16.08.2012, 19:02 | #2 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Чтобы не повторяться, смотрите ответ #3 в этой теме.
Вместо проверки на равенство нулю (что для чисел с плавающей точкой, как и в вашем случае, может оказаться неверным), сравнивайте, меньше ли число некоего заранее заданного малого delta. Посмотрите в сторону std::numeric_limits<double>::epsilo n(), возможно, это то, что вам нужно. И, да, генерировать в качестве исключения строку - не самый лучший вариант. Лучше создайте специальный класс исключения (например, наследник std::runtime_error).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
17.08.2012, 15:16 | #3 |
Пользователь
Регистрация: 11.02.2009
Сообщений: 29
|
Спасибо за ответ!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
проблема с short и double | guest45833 | Visual C++ | 3 | 23.02.2012 14:40 |
функция float average(int arrray[],int from,int to) | yuliyayuliya | Помощь студентам | 0 | 25.04.2011 21:55 |
int mass to double | Alex_sim | Общие вопросы .NET | 9 | 08.05.2010 16:25 |
округливание в C#( double to int) | Natok | Помощь студентам | 1 | 25.05.2009 22:58 |
преобразование int в double Си++ | t1empo | Помощь студентам | 11 | 27.04.2009 19:31 |