Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.02.04;
Скачать: CL | DM;

Вниз

Округление   Найти похожие ветки 

 
Dmk ©   (2016-02-12 00:57) [0]

Есть такое значение 504,00001502037. При сравнении с числом 504 они не равны, но по логике должны быть раны. Как бороться с мусором в конце? Поделитесь опытом.


 
Dmk ©   (2016-02-12 01:02) [1]

>раны = равны

Все числа Extended.

Или вот еще пример: (100/300) без округления равно 0.333333333333485, а после RoundTo(100/300, -2) получается 0,330000013113022. Откуда то "мусор" в конце. Как его убрать?


 
KilkennyCat ©   (2016-02-12 02:35) [2]

уменьшить разрядность до 2 после запятой. или округлять до 15


 
sniknik ©   (2016-02-12 07:29) [3]

http://delphikingdom.com/asp/viewitem.asp?catalogid=374
Пример второй – сравнение


 
Dimka Maslov ©   (2016-02-12 08:26) [4]

Раньше были такие хорошие книжки, которые описывали принципы работы с вещественными числами и объясняли про мусор, возникающий из-за недостаточной точности вычислений и округления. А как с этим бороться нам ещё 20 лет назад в паровозной школе рассказывали. Преподаватели не знали, как правильно пишутся Turbo Paskal и Norton Comandor, но прекрасно вызубрили, что операция сравнения вещественных чисел должна записываться как abs(a-b)<eps, где eps - наперёд заданная точность.


 
Rouse_ ©   (2016-02-12 11:59) [5]


> Откуда то "мусор" в конце. Как его убрать?

http://rouse.drkb.ru/other.php#round


 
Dmk ©   (2016-02-12 16:23) [6]

>sniknik ©   (12.02.16 07:29) [3]
В том и прикол, что "мусор" появляется после округления!!! Причем не всегда!
От чего это зависит?


 
Германн ©   (2016-02-12 16:31) [7]


> Dmk ©   (12.02.16 16:23) [6]

Так ты статью по ссылке прочитал? Там все написано.


 
sniknik ©   (2016-02-12 17:10) [8]

> От чего это зависит?
от сопроцессора, и способа хранения таких чисел.


 
Dimka Maslov ©   (2016-02-12 17:39) [9]

Даже RoundTo не избавляет от мусора. Просто после RoundTo можно брать гораздо меньшее eps при сравнении.


 
Юрий Зотов ©   (2016-02-12 19:22) [10]

> Dmk ©   (12.02.16 16:23) [6]
> В том и прикол, что "мусор" появляется после округления!


Число 0.33 в двоичном коде не может быть представлено точно. Поэтому как ни округляй, а погрешность все равно будет.



Страницы: 1 вся ветка

Текущий архив: 2018.02.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.004 c
1-1351687767
cobalt
2012-10-31 16:49
2018.02.04
Декларация и исполнение процедур/функций


2-1455547592
Незарегистрированный
2016-02-15 17:46
2018.02.04
Как корректно сравнить/присвоить Longint с Сишными TRUE и FALSE?


6-1284889393
Cobalt
2010-09-19 13:43
2018.02.04
Как скачать XML, а не обработанный уже HTML?


2-1455133154
aturasama
2016-02-10 22:39
2018.02.04
сокеты


15-1469302746
Юрий Зотов
2016-07-23 22:39
2018.02.04
Как много нам открытий чудных...