Autor Beitrag
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Do 19.06.08 18:47 
Hi,

Mir ist es seit längerer Zeit ein Ärgernis, dass sin, cos und tan im Mathematik-Unterricht als Blackbox behandelt werden. Nun sind diese Funktionen in Delphi ja im asm-Code deklariert. Es würde mich freuen, wenn jemand sin und cos in normalen Delphi-Code übersetzen würde.

Danke! :D

mfG,


Moderiert von user profile iconChristian S.: Topic aus Off Topic verschoben am Do 19.06.2008 um 18:48

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 19.06.08 20:02 
Der asm code von sin cos etc ist in etwa so kompliziert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
function sin(x:extended):extended;
asm
  fld tbyte x;//laden in den mathematischen Coprozessor
  fsin;//sin in HArdware ausführen
end;

Du siehst also es gibt hier kein Delphi-Pendant, da es eine einzige Anweisung ist. Welcher spezielle Algorithmus da in Hardware gegossen wurde ist hardwareabhängig. Meine gehört zu haben, dass Intel für Core 2 den Algorithmus da umgestellt hat. Du kannst eine Implementierung über Taylorreihen in Delphi schreiben, wenn du dabei aber selbst "nur" die hardware Fließkomma benutzt denke ich würdest du die Werte verschlimmbessern. Ich weiß auch, dass in Hardware meist nicht die Tylorreihen verdrahtet sind, da sie zu langsam sind.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 19.06.08 20:57 
Der Sinus wird normalerweise auf einem kleinen Intervall [0,pi/2] iterativ numerisch berechnet oder tabelliert und geschickt interpoliert, die Werte in anderen Intervallen werden durch Spiegelung etc. ermittelt.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 19.06.08 21:55 
Im guten alten Turbo Pascal gab es einen Compilerschalter mit dem man Programme so übersetzen konnte das sie ohne CoProzessor auskamen. Wer also über eine Vollversion mit allen Quelltexten verfügt, müsste mit einigem stöbern über die Sinus Implementierung stolpern.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 19.06.08 23:20 
Es ist jedenfalls nicht so, dass du viel über den Sinus aus der Implementation lernst. Bei Hardwareimplementationen wird oft getrickst.

Eine Möglichkeit: Eine Tabelle von Drehmatrizen (oder komplexen Zahlen), womit man einen Einheitsvektor um +45, +22.5, +11.25, +5.625, ... drehen kann. Die Winkel werden dann so kombiniert und hintereinander angewendet, bis der Einheitsvektor genau um den eingegebenen Winkel gedreht wurde. Aus der Rechnung erhält man dann Sinus und Cosinus gleichzeitig.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 19.06.08 23:25 

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.