Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неправильное округление в функции [D5]


Страницы:   1 2

Есипенко ©   (2007-01-15 14:34:00) 

Есть функция Герона

function Geron(ax,ay,bx,by,cx,cy:Real): Real;
var
 a,b,c,p: Real;
begin
 a:=Dlina(ax,ay,bx,by); //=7,07
 b:=Dlina(bx,by,cx,cy); //=7,07
 c:=Dlina(ax,ay,cx,cy); //=10
 p:=(a+b+c)/2;          //=12,07
 Result:=Sqrt(abs(p*(p-a)*(p-b)*(p-c)));
end;

При трассировке
Выражение p*(p-a)*(p-b)*(p-c) равно 625,00
Выражение (p-a)*(p-b)*(p-c) равно 51,75
51,75*12,07=624,6225
Если место р написать 12,07 то результат правильный.
Что это может быть?


Есипенко   (2007-01-15 18:10:00) [1]

Вопрос снят. Всем спасибо.


ors_archangel   (2007-01-15 17:39:00) [2]

в таком случае правильно считает:
 s := Geron(0, 0, 1, 0, 0, 1); // 0.5
У меня для второго варианта: Geron() = 14, это правильно или совсем нет?


Есипенко   (2007-01-15 17:25:00) [3]

> ors_archangel

Есть треугольник ABC и точка X.
1.Найдем площадь треугольника ABC
2.Найдем площади треугольников ABX, BCX и ACX.
3.Сравним. Если площадь треугольника ABC равна сумме площадей ABX, BCX и ACX, значит точка принадлежит треугольнику, иначе - нет


ors_archangel   (2007-01-15 17:17:00) [4]


> В задании сказано используя формулу Герона.

В принципе, если площадь треугольника S --> 0, то можно делать вывод, что точки лежат на одной прямой. А как узнать, что точка принадлежит треугольнику? Их всего вроде три? Или я ошибаюсь?


Есипенко   (2007-01-15 17:14:00) [5]

В задании сказано используя формулу Герона.


ors_archangel   (2007-01-15 17:05:00) [6]

[32] = [32] * 2


ors_archangel   (2007-01-15 17:04:00) [7]


> принадлежит ли точка треугольнику

Обычно суммы углов векторов от точки к вершинам, меньшей pi*0.9999 хватало


Есипенко   (2007-01-15 17:04:00) [8]

Первый вариант
ax-0
ay-0
bx-5
by-5
cx-10
cy-0
Второй вариант
ax-0
ay-0
bx-2
by-3
cx-18
cy-13

До момента вычиления квадратного корня результат уже неправильный.

> Сергей М.
Да.


Сергей М.   (2007-01-15 17:00:00) [9]


> используя этот код, нужно узнать ..принадлежит ли точка треугольнику


И для этого тоже требуется не иначе как формула Герона, согласно заданию ?!


ors_archangel   (2007-01-15 16:57:00) [10]

:)
Ну и какой брать:

 s := Geron(0.0, 5.5, 10.0, 0.0, 2.3, 18.13); // 69.475

или

 s := Geron(0.0, 0.0, 5.5, 2.3, 10.0, 18.13); // 38.3575

или ?


Есипенко   (2007-01-15 16:56:00) [11]

Вот код
program LB5_1;
{$APPTYPE CONSOLE}
uses SysUtils;

function Dlina(x1,y1,x2,y2:Extended): Extended;
begin
 Result:=Sqrt(Sqr(x1-x2)+Sqr(y1-y2));
end;

function Geron(ax,ay,bx,by,cx,cy:Extended):Extended;
var
 a,b,c,p: Extended;
begin
 a:=Dlina(ax,ay,bx,by);
 b:=Dlina(bx,by,cx,cy);
 c:=Dlina(ax,ay,cx,cy);
 p:=(a+b+c)/2;
 Result:=Sqrt(abs((p-a)*(p-b)*(p-c)*p));
end;

var
ax,ay,bx,by,cx,cy,Rez:Extended;
begin
   Write('Insert Ax: '); ReadLn(ax);
   Write('Insert Ay: '); ReadLn(ay);
   Write('Insert Bx: '); ReadLn(bx);
   Write('Insert By: '); ReadLn(by);
   Write('Insert Cx: '); ReadLn(cx);
   Write('Insert Cy: '); ReadLn(cy);

   Rez:=Geron(ax,ay,bx,by,cx,cy);
   WriteLn(Rez);
   ReadLn;
end.


Но используя этот код, нужно узнать не только площадь, а еще принадлежит ли точка треугольнику и лежат ли три точки на одной прямой.
А если такое расхождение, то что можно узнать.
Ставил и Single,Real,Double - результат одинаковый.


Плохиш   (2007-01-15 16:54:00) [12]


> Если на калькуляторе 22.338558425 я брал 22.34

Можно дальше не продолжать...


Есипенко   (2007-01-15 16:50:00) [13]

Входные параметры
0,0 5,5 10,0
0,0 2,3 18,13

Если на калькуляторе 22.338558425 я брал 22.34
Я понимаю, что результаты будут отличаться, но не до такой степени.


ors_archangel   (2007-01-15 16:44:00) [14]

22.338558425 * ???? =  1,96000000Е+0002
Чему равно ax,ay,bx...... Даёшь все входные параметры Geronа!


Сергей М.   (2007-01-15 16:43:00) [15]


> Есипенко ©   (15.01.07 16:40) [21]


Что такое "две точки после запятой" в calc.exe ?

Где фигурируют эти самые ""две точки после запятой" в твоейпрограмме, прежде чем сравнивать ее работу с работой calc.exe ?


Есипенко   (2007-01-15 16:42:00) [16]

> ors_archangel

p=22.338558425


ors_archangel   (2007-01-15 16:41:00) [17]

Вообще, каковы входные параметры? Тестировать нечего!


Есипенко   (2007-01-15 16:40:00) [18]

> Сергей М.

На calc.exe с двумя точками после запятой.
А Sitizen SDC-888  и calc.exe при вычислении с двумя разрядами после запятой будут так отличаться?


ors_archangel   (2007-01-15 16:39:00) [19]

Чему p равно для [17] 1,96000000Е+0002 ?


Сергей М.   (2007-01-15 16:30:00) [20]


> при подсчете на калькуляторе


На каком ? На котором тётьклава в ларьке выручку считает ?
Или на calc.exe ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо