![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Неправильное округление в функции [D5]
Есипенко © (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 ?