AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Mathematikproblem: Dreieck

Ein Thema von Axxus · begonnen am 20. Nov 2007 · letzter Beitrag vom 22. Nov 2007
Antwort Antwort
Seite 2 von 2     12
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#11

Re: Mathematikproblem: Dreieck

  Alt 21. Nov 2007, 10:25
Zitat von 3_of_8:
Ich glaube, er meint die Höhe.
Ich glaube, daß er, wenn er "Höhe" gemeint hätte, auch "Höhe" geschrieben hätte.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Mathematikproblem: Dreieck

  Alt 21. Nov 2007, 11:19
Zitat von Amateurprofi:
Zitat von 3_of_8:
Ich glaube, er meint die Höhe.
Ich glaube, daß er, wenn er "Höhe" gemeint hätte, auch "Höhe" geschrieben hätte.
Da war es wohl noch etwas früh heute morgen, und die Anmerkungen sind richtig.
Was ich beschrieben habe funktioniert so nur bei einem gleichschenkligen Dreieck.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Mathematikproblem: Dreieck

  Alt 21. Nov 2007, 14:21
Die Höhe ist ja leider in meinem Programm nicht gegeben
Sonst wärs ja ganz einfach

A = 1/2 * g * h
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Mathematikproblem: Dreieck

  Alt 21. Nov 2007, 14:31
Ich würde es, wie Appolonius schon gesagt hat, mit der Heronschen Formel machen. Nach der ist
A = sqrt( x(x-a)(x-b)(x-c) ), wobei x die Hälfte des Umfangs ist.

P.S.: Ich wünsch mir LaTeX-Tags
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Mathematikproblem: Dreieck

  Alt 21. Nov 2007, 14:38
Du hast doch geschrieben das die länge aller drei Seiten bekannt sind.
Dann rechne sie zusammen teile sie durch zwei und dann kannst Du es wie ein Oquadrat ausrechnen.
Oder bin Ich jetzt falsch.
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Mathematikproblem: Dreieck

  Alt 21. Nov 2007, 14:57
Zitat von inherited:
P.S.: Ich wünsch mir LaTeX-Tags
Ich auch
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Mathematikproblem: Dreieck

  Alt 21. Nov 2007, 22:21
Abgesehen von der Heron-Formel gäbe es noch diese nicht ganz so rechenintensive Möglichkeit:
(sqrt ist IIRC langsamer als sin)
Miniaturansicht angehängter Grafiken
dreieck_118.png  
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#18

Re: Mathematikproblem: Dreieck

  Alt 22. Nov 2007, 01:22
Zitat von 3_of_8:
Abgesehen von der Heron-Formel gäbe es noch diese nicht ganz so rechenintensive Möglichkeit:
(sqrt ist IIRC langsamer als sin)
@3_of_8 :
Da ist Intel aber ganz anderer Meinung.
FSIN benötigt 160-200 Takte
FSQRT benötigt 23 Takte (Single), 38 Takte (Double), 43 Takte (Extended)

Ich hab das mal getestet
Deine Version : f1:=Sin(alpha)*b*c/2;
Eine andere Version : f2:=Sqrt(4*Sqr(a)*Sqr(b) - Sqr((Sqr(a) + Sqr(b) - Sqr(c)))) / 4;

Deine Version = 344 Takte
Andere Version = 292 Takte

Und beides durch ASM-Funktionen optimiert

Deine Version = 296 Takte
Andere Version = 200 Takte

Zu beachten ist noch, daß beim Test der Winkel bereits in Rad vorliegt und nicht, wie bei Aufgabenstellungen üblich, in Grad.
Das bringt dann auch noch ein paar Takte auf die Waage.

Und zum Nachprüfen hier die komplette Test-Prozedur :

Delphi-Quellcode:
PROCEDURE TMain.Test;
var a,b,c,alpha,f1,f2,f3,f4:extended; t0,t1,t2,t3,t4:int64; i:integer;

FUNCTION TimeStamp:int64;
asm
   rdtsc
end;

FUNCTION Surface1(var alpha,b,c:extended):extended; // Sinus-Version
const two:integer=2;
asm
   fld tbyte [edx] // b
   fld tbyte [ecx] // c
   fld tbyte [eax] // alpha
   fsin
   fmulp
   fmulp
   fidiv two
end;

FUNCTION Surface2(var a,b,c:extended):extended; // andere Version
const four:integer=4;
asm
   fld tbyte [eax] // a
   fmul st,st // st0=Sqr(a)
   fld tbyte [edx] // b
   fmul st,st // st0=Sqr(b), st1=Sqr(a)
   fld tbyte [ecx] // c
   fmul st,st // st0=Sqr(c), st1=Sqr(b), st2=Sqr(a)
   fchs // st0=-Sqr(c), st1=Sqr(b), st2=Sqr(a)
   fadd st,st(1) // st0=Sqr(b)-Sqr(c), st1=Sqr(b), st2=Sqr(a)
   fadd st,st(2) // st0=Sqr(a)+Sqr(b)-Sqr(c), st1=Sqr(b), st2=Sqr(a)
   fmul st,st // st0=Sqr(Sqr(a)+Sqr(b)-Sqr(c)), st1=Sqr(b), st2=Sqr(a)
   fxch st(2) // st0=Sqr(a), st1=Sqr(b), st2=Sqr(Sqr(a)+Sqr(b)-Sqr(c))
   fimul four // st0=4*Sqr(a), st1=Sqr(b), st2=Sqr(Sqr(a)+Sqr(b)-Sqr(c))
   fmulp // st0=4*Sqr(a)*Sqr(b), st1=Sqr(Sqr(a)+Sqr(b)-Sqr(c))
   fsubrp // st0=4*Sqr(a)*Sqr(b)-Sqr(Sqr(a)+Sqr(b)-Sqr(c))
   fsqrt // st0=Sqrt(4*Sqr(a)*Sqr(b)-Sqr(Sqr(a)+Sqr(b)-Sqr(c)))
   fidiv four // st0=Sqrt((4*Sqr(a)*Sqr(b)-Sqr(Sqr(a)+Sqr(b)-Sqr(c))))/4
end;

begin
   a:=3;
   b:=4;
   c:=4.5;
   alpha:=0.71217178712617798; // Rad
   t1:=High(int64);
   t2:=High(int64);
   t3:=High(int64);
   t4:=High(int64);
   for i:=1 to 10 do begin
      // Sinus-Version
      t0:=Timestamp;
      f1:=Sin(alpha)*b*c/2;
      t0:=Timestamp-t0;
      if t0<t1 then t1:=t0;
      // andere Version
      t0:=Timestamp;
      f2:=Sqrt(4*Sqr(a)*Sqr(b) - Sqr((Sqr(a) + Sqr(b) - Sqr(c)))) / 4;
      t0:=Timestamp-t0;
      if t0<t2 then t2:=t0;
      // Sinus-Version in ASM
      t0:=Timestamp;
      f3:=Surface1(alpha,b,c);
      t0:=Timestamp-t0;
      if t0<t3 then t3:=t0;
      // andere Version in ASM
      t0:=Timestamp;
      f4:=Surface2(a,b,c);
      t0:=Timestamp-t0;
      if t0<t4 then t4:=t0;
   end;

   ShowMessage('F1='+FloatToStr(f1)+' Ticks='+IntToStr(t1)+' (Sinus)'#13+
               'F2='+FloatToStr(f2)+' Ticks='+IntToStr(t2)+' (andere)'#13+
               'F3='+FloatToStr(f3)+' Ticks='+IntToStr(t3)+' (Sinus ASM)'#13+
               'F4='+FloatToStr(f4)+' Ticks='+IntToStr(t4)+' (andere ASM)');
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Mathematikproblem: Dreieck

  Alt 22. Nov 2007, 15:48
IIRC heißt ja auch "If I remember correctly".
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz