Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Погрешности при вычитании целого числа из double
|
|||
|---|---|---|---|
|
#18+
Уважаемые, помогите решить проблему. При вычитании 38 из 38.885 получаю 0,884999999999998 ! double ag, ag2, res; ag = 38.885; ag2 = 38.0; res = ag - ag2; res = 0,884999999999998 Далее res должно быть умножено на 1000 и применена функция floor(); В итоге имеем 884 вместо 885 ! Как избавиться от таких погрешностей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 23:12 |
|
||
|
Погрешности при вычитании целого числа из double
|
|||
|---|---|---|---|
|
#18+
IgorWZ, floor - неудачная функция для округления round даст правильный результат. а избавиться от погрешностей никак - так уж устроена плавающая арифметика Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 23:26 |
|
||
|
Погрешности при вычитании целого числа из double
|
|||
|---|---|---|---|
|
#18+
IgorWZ, Сначала надо округлить результат до точности аргументов, а уже потом использовать floor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 23:42 |
|
||
|
Погрешности при вычитании целого числа из double
|
|||
|---|---|---|---|
|
#18+
Изопропилfloor - неудачная функция для округления А кто сказал что тут требуется округление? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 23:44 |
|
||
|
Погрешности при вычитании целого числа из double
|
|||
|---|---|---|---|
|
#18+
Мне нужно знать точно три знака после запятой, точнее третий знак - это десятые доли копейки. floor дает ближайшее снизу число, без оглядки на 4 и последующие знаки. Вроде бы то, что нужно. Но почему такая погрешность получается при вычитании? На ровном месте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 23:54 |
|
||
|
Погрешности при вычитании целого числа из double
|
|||
|---|---|---|---|
|
#18+
IgorWZМне нужно знать точно три знака после запятой, точнее третий знак - это десятые доли копейки. floor дает ближайшее снизу число, без оглядки на 4 и последующие знаки. Вроде бы то, что нужно. Но почему такая погрешность получается при вычитании? На ровном месте! Для начала ответь ты: сколько вещественных чисел вмещается диапазоне от 0 до 1? А какое число разрядов в твоем компьютере? А теперь подумай как бесконечное множество вещественных чисел можно представить конечным числом разрядов? По-идее остальные выводы ты можешь сделать сам: - только некоторое подмножество вещественных чисел можно представить в памяти компьютера точно. - любое действие с вещественными числами в С++ должно принимать в расчет "неточность" представления, а результат должен трактоваться только с указанной точностью Ну что, вопрос про вычитание на ровном месте снимаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 01:16 |
|
||
|
Погрешности при вычитании целого числа из double
|
|||
|---|---|---|---|
|
#18+
IgorWZ, ты не понимаешь как работает тип данных double. Вообще его нельзя использовать для финансовых расчётов. Или переводи всё в копейки и считай в целых числах или ищи специальные фреймворки для поддержки денежных величин в С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 01:39 |
|
||
|
Погрешности при вычитании целого числа из double
|
|||
|---|---|---|---|
|
#18+
Погуглите либы, которые делают арифметику с фиксированной точностью после запятой. По идее, через них должно работать, но считают они, скоерй всего, через cpu а не через fpu (считайте скорость будет медленей, но на сколько не знаю - надо тестить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 15:54 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38172762&tid=2020394]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
164ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 10ms |
| total: | 280ms |

| 0 / 0 |
