FPU Befehl für ATAN, ACOS und ASIN existiert nicht

Mitglied: supernicky

supernicky (Level 1) - Jetzt verbinden

05.08.2011 um 03:06 Uhr, 5847 Aufrufe, 18 Kommentare

Hallo,

Weiß jemand wie der FPU Befehl für oben genannte Funktionen lautet?

Hallo,

Ich möchte in meinem Programm die Winkel aus einem Dreieck berechnen bei dem ich nur die Längen der Seiten habe und ein Winkel immer 90 Grad ist.
Bis zum Sinus eines Winkels komme ich noch, aber es fehlen mir oben genannten Funktionen.

Die FPU hat den Befehl FPTAN und FPATAN aber damit stimmt mein Ergebnis leider nicht.

Weiß jemand welchen (Um)Weg man hier gehen muss?

Gibts bei den MMX oder SSE Befehlen etwas für oder gegen mein Problem oder setzte ich die Befehle FPTAN und FPATAN nur falsch ein?

Um Info wird gebeten..

Danke und Gruß,,

Nicky
Mitglied: 64748
64748 (Level 2)
05.08.2011 um 07:52 Uhr
Guten Morgen Nicky

Zitat von @supernicky:
... oder setzte ich die Befehle FPTAN und FPATAN nur falsch
ein?

Das ist eine gute Frage, wie setzt Du sie denn ein? vielleicht postest Du mal etwas Code.
Ansonsten eine Erklärung wie man sie richtig einsetzt hier: http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_1 ...

Gruß

Markus
Bitte warten ..
Mitglied: supernicky
05.08.2011 um 11:53 Uhr
Hallo Markus,

Danke für den Link.

Ich habe ein Beispiel zur Berechnung meiner Aufgabe eine gute Seite im Netz gefunden...
Code habe ich gerade keinen da, da ich an einem anderen PC sitze und erst heute abend wieder an meinem Rechner arbeite...

So solls aber gemacht werden:

Aufgabe: rechtwinkliges Dreieck mit den Seitenlängen 76mm, 34mm und 84mm.
Die Seite mit 34mm liegt dem gesuchten Winkel gegenüber. Die Seite mit 84mm ist dann die Hypothenuse.
Hilfvariablen sind p, q und h

q = 34² / 84 = 13,76190

p = 84 - q = 70,2381

h = Wurzel (q * p) = 31,09034

gesuchter Winkel im Bogenmaß = atan (h/p)

Bis zum Ergebnis von h stimmt auch alles in meinem Programm... Ich lasse mir die Ergebnisse alle anzeigen...

FPTAN scheidet aus, da er den Tanges berechnet...

FPATAN möchte zwei Parameter... nur welcher ist der zweite??? h nach Register ST(0) und p nach Register ST(1) oder ganz was anderes?

Gruß, Nicky
Bitte warten ..
Mitglied: 64748
64748 (Level 2)
05.08.2011 um 12:20 Uhr
Hallo nochmal,

ich hab nun leider von Assembler keine Ahnung. Allerdings gibts ja die vergleichbaren trigonometrischen Funktionen in jeder Programmiersprache.

Mathematisch: der Sinus des Winkels, der der Seite mit 34mm gegenüber liegt ist gleich 34mm/84mm, also ist der gesuchte Winkel
Was ich nicht ganz verstehe, wenn Du schon die drei Seitenlängen des rechtwinkligen Dreiecks kennst, dann brauchst Du doch eigentlich keinen Tangens.

Oder hat einer von uns beiden die Aufgabenstellung falsch verstanden?

Gruß

Markus
Bitte warten ..
Mitglied: dog
05.08.2011 um 16:32 Uhr
FPATAN möchte zwei Parameter... nur welcher ist der zweite???

Ist doch alles dokumentiert:

The FPATAN instruction returns the angle between the X axis and the line from the origin to the point (X,Y), where Y (the ordinate) is ST(1) and X (the abscissa) is ST(0).

http://www.jaist.ac.jp/iscenter-new/mpc/altix/altixdata/opt/intel/vtune ...
Bitte warten ..
Mitglied: supernicky
05.08.2011 um 17:31 Uhr
Hallo Markus,

ich will auch keinen Tangens haben :) face-smile

das ist aber die einzigst für mich nachvollziehbare Formel die ich in meinem Programm anwenden kann.

Als FPU Befehl gibt es in Assembler nur

FCOS für den Cosinus
FSIN für den Sinus
FPTAN für den Tangens
FPATAN für den Arctangens...(denke ich jedenfalls)

Es bleibt mir also nichts anderes übrig als oben stehenden Weg zu gehen.

Auf dieser Seite wird der Rechenweg genau angegeben
http://www.arndt-bruenner.de/mathe/scripts/dreiecksberechnungrw.htm

Wie dog schon schreibt ist ja alles beschrieben...übersetzt in Google heißt das aber:
Die FPATAN Anweisung gibt den Winkel zwischen der X-Achse und die Linie vom Ursprung zum Punkt (X, Y), wobei Y (Ordinate) ist ST (1) und X (Abszisse) ist ST (0).

Leider weiß ich nicht was eine Ordinate oder eine Abszisse ist... ich bin keine Mathegenie...

Ich bräuchte nur noch den zweiten Parameter für den Befehl FPATAN. Am besten genau das Maß aus meinem Beispieldreieck, damit ich es nachvollziehen kann.

Danke und Gruß

Nicky
Bitte warten ..
Mitglied: dog
05.08.2011 um 17:40 Uhr
Sorry, was gibt es da nicht zu verstehen?

X-Achse

Im rechtwinkligen kartesischen Koordinatensystem (also das, was in 99% der Fälle benutzt wird) die Linie auf der alle Punkte (x,0) liegen.

Ursprung

Der Punkt (0,0) im Koordinatensystem.

Ordinate

Die Komponente Y des Punktes (X,Y)

Abszisse

Die Komponente X des Punktes (X,Y)

Wenn du es als Funktionen beschreiben willst bekommst du den Winkel zwischen der Funktion

f(x)=0

und

f(t)=(Y/X)*t
Bitte warten ..
Mitglied: supernicky
05.08.2011 um 17:49 Uhr
Hallo dog,

wie oben schon steht habe ich die richtige Formel.. Mein Dreieck hat alle Maße.

Ich finde es gut wenn du das weißt was gemeint ist, ich weiß es wirklich nicht... je mehr Formeln ich bekomme desto schwieriger wird es für mich...

Kannst du mir bitte anhand meines Dreiecks die Zahlen für den FPATAN Befehl eintragen. Also was in ST(0) und was in ST(1) stehen muss.

Danke und Gruß

Nicky
Bitte warten ..
Mitglied: dog
05.08.2011 um 20:51 Uhr
Kannst du mir bitte anhand meines Dreiecks die Zahlen für den FPATAN Befehl eintragen

Da dein Dreieck rechtwinklig ist und du schon weißt, wo er sitzt können wir 3 Vektoren konstruieren:

v1 = ( 34 0 ) v2 = ( -34 76) v3 = ( 0 -76)

Daraus ergeben sich zum Ursprung die Punkte A(0,0) B(34,0) C(0,76)

Damit können wir mit FPATAN den Winkel zwischen v1 und v3 berechnen, den kennen wir aber schon, der ist 90°

Um einen relevanten Winkel zu bekommen verschieben wir das ganze System um v1 nach links (die Vektoren verändern sich dadurch nicht!):

A(-34,0) B(0,0) C(-34,76)

Jetzt können wir FPATAN auf C anwenden und bekommen einen Winkel im 2. Quadranten (also 90° <= w <= 180°)
Um daraus den Innenwinkel zu erhalten rechen wir 180° - w
und damit lässt sich der dritte Winkel als 180° = a + 90° + (180° - w) bestimmen.
Bitte warten ..
Mitglied: supernicky
05.08.2011 um 23:10 Uhr
Hallo Markus,

hier der Code:

fld z2 ;34 laden
fld z2 ;34 nochmal laden
fmul ;34*34
fld z1 ;84 laden nach ST0 und 34 schieben nach ST1
fdiv ;34*34 / 84 = 13,76190

fstp q ;13,76190 nach q speichern


fld z1 ;84 laden nach ST0
fld q ;13,76190 laden nach ST0 und 84 nach ST1 schieben
fsub ;84 - 13,76190 = 70,2381

fstp p ;70,238 nach p speichern

fld p ;70,238 laden
fld q ;13,76190 laden
fmul ;13,76190 * 70,2381
fsqrt ;Wurzel ziehen
fstp h ;Ergebnis nach h speichern = 31,090347511

fld h ;31,09034 nach ST (0)
fld p ;70,2381 nach ST(0) und 31,09034 nach ST(1)
fdiv ;31,09034 / 70,2381 = 0,442642
fstp h ;0,442642 nach h speichern
bis hier passt alles:

hier der Problembereich:
fld1 ;1 auf den FPU Stack
fld h ; 0,442642 auf den FPU Stack und 1 nach ST (1)

fpatan ;hoffentlich den ATAN berechnen....

Das Ergebnis ist 11,5408. Ich muss aber irgendwie auf 24 kommen.. Die Gradzahl des Winkels..

Wenn ich vor dem FPATAN Befehl die Zahlen tauschen würde, erhalte ich als Ergebnis:
4,1672.... ist auch nicht 24.

FPATAN verlangt 2 Parameter aber ich weiß nicht wie der zweite heißt...
Ich weiß nichtmal ob FPATAN der richtige Befehl dafür ist...aber es steckt schonmal ATAN drin...


Für Infos bin ich sehr dankbar

Nicky
Bitte warten ..
Mitglied: 64748
64748 (Level 2)
05.08.2011 um 23:43 Uhr
Guten Abend,

also mir ist das zu kompliziert.

Der Tangens (tan) des gesuchten Winkels ist doch
damit gilt für den Winkel
und mit dem Taschenrechner (in DEG = Grad) ergeben sich 24°, also das gewünschte Ergebnis.

Nun rechnen wir hier im Bogenmaß, das bedeutet der Winkel wird gemessen als Bogenlänge auf einem Kreis mit dem Radius 1.
Der Umfang eines Kreises beträgt 360° entspricht 2*pi
da 360°/24° = 15 ist entspricht 24° im Bogenmaß genau 2*pi/15 = 2*3.14/15 = 0.419 (ungefähr laut Kopfrechnen) und das ist ja der Wert, den Du ermittelt hast.

Nochmal andersrum: multipliziere Dein Ergebnis mit 2*pi, allerdings hast Du soviele Rechnungen in Deinem Code, dass wohl von einer gewissen Ungenauigkeit auszugehen ist.

Gruß

Markus
Bitte warten ..
Mitglied: supernicky
06.08.2011 um 00:20 Uhr
Hallo Markus,

das ist alles richtig was du geschrieben hast.. das hab ich ja auch..

Aber Assembler hat den ATAN Befehl nicht. Ich kann den Tangens von 34/76 nicht berechnen, zumindest nicht auf dem normalen Weg.

34 / 76 = 0,447368 und der Tangens davon ist genau 0,42066. Diesen einen Schritt muss ich irgendwie ohne die Tangensfunktion berechnen.

Ich brauche also einen Befehl der mir aus der 0,447368 die 0,42066 "zaubert".

Wenn ich dort bin, weiß ich wie ich weiter rechnen muss.

Bitte grübel nochmal nach

Nicky
Bitte warten ..
Mitglied: 64748
64748 (Level 2)
06.08.2011 um 00:31 Uhr
Zitat von @supernicky:
34 / 76 = 0,447368 und der Tangens davon ist genau 0,42066. Diesen einen Schritt muss ich irgendwie ohne die Tangensfunktion
berechnen.
Nein, das ist Unsinn, 34/76 _ist_ der Tangens des gesuchten Winkels per Definition!

Markus
Bitte warten ..
Mitglied: dog
06.08.2011 um 09:58 Uhr
Lasst euch mal nicht daran stören, dass ich oben schon eine Lösung gepostet habe...

Wenn man es sich aber kompliziert machen will:
Die arctan()-Funktion ist eine Reihe, man kann sie also auch relativ leicht selbst programmieren.
Bitte warten ..
Mitglied: 64748
64748 (Level 2)
06.08.2011 um 10:17 Uhr
@dog: stimmt. Aber ich glaube so ganz ohne Geometriekenntnisse ist es sehr schwer überhaupt zu verstehen was man da macht. Und das wahr wohl auch das Problem.

Aber ich hätte jetzt doch gerne gewusst, wie der TO die Aufgabe gelöst hat, der Thread ist ja als gelöst markiert.

Gruß

Markus
Bitte warten ..
Mitglied: supernicky
07.08.2011 um 12:27 Uhr
Hallo ihr beiden...

letzte Nacht hatte ich auf einer Baustelle die Gelegenheit einen Vermessungsingenieur zu fragen wie man das berechnen kann.

Er sagte mir, das es Sinus / Cosinus sein müsste.
Auch dieser Versuch scheiterte, aber ich erinnerte mich an den FPATAN Befehl. Er benötigt ja 2 Werte.

FPATAN sin, cos ???

sin ist in meinem Fall = 34 / 84 und cos = 76 / 84

Also gleich ins Programm eingetippt und siehe da, es kommt genau der Wert raus den ich gesucht habe.
Anschließend 6,28 (2 * Pi) durch den Wert geteilt und als A gespeichert... dann 360 durch A geteilt und ich habe den genauen Winkel den ich suche.

1. FPATAN ist der richtige Befehl
2. Prarameter sind Sin und Cos (Was er damit macht weiß ich aber leider nicht)
3. Vektoren brauche ich diesmal nicht, obwohl mich der Rechenweg auch interessieren würde. Vielleicht geht der ja einfacher.

Dann bis zur nächtes Frage

Nicky
Bitte warten ..
Mitglied: 64748
64748 (Level 2)
07.08.2011 um 12:42 Uhr
Guten Morgen,

also das steht ja alles schon weiter oben im Thread...

Ich frage mich allerdings welchen Background Du eigentlich hast. Ich meine das ist simple Geometrie, also Schulmathematik und ich kann mir beim besten Willen nicht vorstellen, dass jemand erfolgreich mit Assembler programmieren lernen/können soll wenn es an der Schulmathematik fehlt.

Das gilt im übrigen für die Programmierung mit allen anderen Sprachen auch, zumindest dann, wenn's nicht nur um Textbearbeitung geht.

Solltest Du in diesen Bereich tiefer einsteigen wollen, dann empfehle ich Dir, mal zu prüfen wie's mit den Mathekenntnissen aussieht (was hab ich in der Schule gelernt, was hab ich vergessen) und dann da mal gezielt aufzufrischen.

Nix für ungut und noch einen schönen Sonntag

Markus
Bitte warten ..
Mitglied: supernicky
07.08.2011 um 18:05 Uhr
Hallo Markus,

in welchem Thread steht das FPATAN der richtige Befehl ist und das sin und cos die zu übergebenden Parameter sind?

Auch auf der Seite von deinem Link steht nichts von cos und sin als Parameter.

Woher soll ich das also wissen? Auch in meinem Buch mit sehr vielen FPU Befehlen ist ausgerechnet dieser nicht beschrieben.

Nicky
Bitte warten ..
Mitglied: 64748
64748 (Level 2)
07.08.2011 um 18:13 Uhr
Hallo nochmal,

naja, also dass der Tangens gleich dem Quotienten aus Sinus und Cosinus ist
und dass es bei den gegebenen Daten letztlich egal ist, ob du mit dem Sinus, dem Cosinus oder dem Tangens rechnest, das steht oben eigentlich alles schon.
Such mal mit google unter dem Stichwort "Trigonometrie", da findest Du dann z.B. dieses hier: http://de.wikipedia.org/wiki/Trigonometrie

Gruß

Markus
Bitte warten ..
Heiß diskutierte Inhalte
Windows 10
PDF automatisch auf zwei Drucker aufteilen
hannes.pVor 1 TagFrageWindows 109 Kommentare

Hallo zusammen, ich suche verzweifelt nach einer Möglichkeit, ein von einer Web-Anwendung generiertes PDF automatisch auf zwei Drucker drucken zu lassen. Das PDF Dokument ...

Microsoft
Erwerb von M365 Lizenzen, Partner Autorisierung für Azure AD - Globaler Administrator wirklich nötig?
NidavellirVor 1 TagFrageMicrosoft4 Kommentare

Hi zusammen, bitte entschuldigt den etwas sperrigen Titel, aber ein knapperer wollte mir nicht einfallen. :D Wir wollen bei einem Systemhaus M365 Lizenzen (Business ...

Windows 10
Sperrbildschirm nach 5 min
ZeppelinVor 1 TagFrageWindows 1012 Kommentare

Hallo zusammen, ich wende mich mit meinem anliegen an euch weil ich mit meinen Möglichkeiten am Ende bin. Wenn innerhalb von 5 min. keine ...

Speicherkarten
Welchen USB Stick für Bootstick?
gelöst dlnkrgVor 1 TagFrageSpeicherkarten6 Kommentare

Hallo, Ich bin auf der Suche nach USB - Sticks, auf denen ich Linux Ubuntu installieren kann und praktisch als Festplatte für das Betriebssystem ...

Off Topic
BKA und der Bundestrojaner
brammerVor 1 TagInformationOff Topic3 Kommentare

Hallo, habe kurz überlegt ob das unter Off Topic allgemein oder Off Topic LOL gehört brammer

Windows Netzwerk
Sporadisch kein Netz auf mehreren Win10-Maschinen
SolarflareVor 19 StundenFrageWindows Netzwerk6 Kommentare

Hallo, ich habe seit Monaten einen eigenartigen Effekt in unserem Windows-Netz. Windows-Domäne mit ca. 100 Maschinen, alle Clients aktuelles Windows 10. Die Maschinen hängen ...

Sicherheit
Emails als Nur Text
Jessica98Vor 1 TagFrageSicherheit4 Kommentare

Hallo zusammen, macht es Sinn E-Mails als nur Text einzustellen, um sich vor schädlichen HTML-Code zu schützen? Meines Erachtens wird ein Benutzer diese Email ...

Windows 7
Userpfad Problem nach Aenderung des Computernamens
BernerVor 1 TagFrageWindows 78 Kommentare

In einem Netzwerk von 9 PCs sind 9 Ersatz-PCs eingebunden, bei denen im Bedarfsfall vor dem Einsatz nur der Computername und die IP-Adresse angepasst ...