![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
cos(1/2*pi)=-4.3711388287e-08 [D6, XP]
Mr tray © (2006-08-04 19:34:00)Столкнулся с такой вот вешью. x:=cos(1/2*pi) получаю x=-4.3711388287e-08. на самом деле конинус пи на два равен ноль. по сути x очень мал, и в дальнейших вычинслениях эта погрешность не играет роли. но x<0 возвращает true, что мне совсем не нравится. как можно избежать этой погрешности или как с ней бороться?
Rial (2006-08-05 16:26:00) [1]Const
PracizConst = 1E-16;
function Praciz(Const A, B : Extended) : Boolean;
begin
Result:=Abs(A - B) < PracizConst;
end;
Don Nikola (2006-08-05 11:39:00) [2]2RzCoDer:
Могу ошибаться, но вроде pi уже в радианах.
2MrTray:
Сравнивай с епсилоном или делай округление.
RzCoDer (2006-08-04 23:22:00) [3]x:=cos(DegToRad(1/2*pi));
Mr tray (2006-08-04 22:25:00) [4]Ясно. так и быть. буду принимать сей мир со всеми его приколами
palva (2006-08-04 20:15:00) [5]> как можно избежать этой погрешности или как с ней бороться?
Этой погрешности нельзя избежать. Ведь даже аргумент 1/2*pi вы задали с небольшой погрешностью. Чего же вы хотите от функции? И бороться с этим тоже не надо. Нужно принимать мир таким, каков он есть.
Ega23 (2006-08-04 19:48:00) [6]Определение, допустим, предела по Коши помнишь?