Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.10.2010, 14:49

Cordic Algorithmus

Hallo Foren Gemeinschaft.

Mich würde mal interessieren ob jemand diesen Algorithmus schon mal selber Programmiert hat ? Hat zwar nicht direkt was mit Spieleentwicklung zu tun aber indirekt schon, da sich damit ja sin, cos ect. Berechnen/ genau annähern lassen. Was ja bestimmt viele von euch öfters brauchen :)

Wer gar nicht weiß um was es da geht Hier: http://de.wikipedia.org/wiki/CORDIC zum schlau machen

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

27.10.2010, 15:44

Mit welcher Begründung willst Du den implementieren? Aus Deiner Antwort ergäben sich dann nämlich eventuell ganz andere Antworten auf Dein Thema generell.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

27.10.2010, 16:17

weil man sich als informatiker durchaus mit den techniken beschäftigen sollte? und warum nicht, ist doch ein spannendes thema...

@koschi: leider nicht^^ kannte bisher nur die taylor-reihe und lookup-tabellen^^

4

28.10.2010, 07:20

Mit welcher Begründung willst Du den implementieren?


Implementieren will ich ihn nirgends. Ich wollte ihn mal programmieren aber ich habe ihn nicht so richtig nachvollziehen können darum such ich jemand der da mal bissi Licht ins dunkle bringt.

Aber wenn du ne Begründung brauchst um dich damit zu beschäftigen. Der Cordic Algorithmus ist ein Shift and Add Algorithmus was ihn sehr schnell macht. Damit lassen sich dann Sin Cos ect. berechnen und das eben schnell. Hast du dich nie gefragt wie dein Taschenrechner das macht oder wie diese Funktionen (Sin,Cos ect.) aus Math.h funktioniert ? Ich schon.

Und so wie TrommlBommel schon schreibt mich interesieren halt die Hintergründe wie was funktioniert.

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

28.10.2010, 09:24

Hast du dich nie gefragt wie dein Taschenrechner das macht oder wie diese Funktionen (Sin,Cos ect.) aus Math.h funktioniert ? Ich schon.

Tja, die aus Math.h sind aber leider eben keine Reihenentwicklungen, sondern auf üblichen PCs ein Befehl des mathematischen Koprozessors - fsin, fcos, etc. Diese laufen mit Garantie schneller, als was Du da versuchst. Das war auch genau der Grund, warum ich gefragt habe.
Wenn es Dir um die Umsetzung als Übung geht, dann ist das eine gute Idee. Wenn Du damit aber glaubst Dein Programm schneller machen zu können oder die Mathe-Bibiothek nachbauen zu können, dann muss ich Dich leider enttäuschen.

Quellcode

1
2
3
4
5
6
7
8
9
10
double sin ( double x )
{
  __asm
  {
    fld qword ptr x
    fsin
    lea eax, x
    fst qword ptr [eax]
  }
}


Da ich im Studium auch einige Reihen-Entwicklungen für Sinus und Cosinus vorgestellt bekommen habe... öh nein... da habe ich mich danach nie gefragt, wie mein Taschenrechner das wohl macht. Und vorher ehrlich gesagt auch nicht.
Spannender als eine Sinus-Berechnung, die nur einem abstrakten Algorithmus aus Grundrechenarten folgt, ist für mich eher die Art, wie ein Computer die Grundrechenarten umsetzt. Alles darüber ist dann ja schon fast High-Level.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (28.10.2010, 09:32)


6

28.10.2010, 09:45

Ah ok siehst das, dass in math.h so gemacht wird wuste ich z.B. nicht.

Ursprünglich hat ich nach einer möglichkeit gesucht den sin ect. schnell zu berechnen auf einem µC habe es dann aber sein gelassen weil ich es net wirklich gecheckt hatte mit dem Cordic algorithmus.

Ich würde es gern mal Programmieren aber dafür muß ich es erstmal checken ?(

Und so nebenbei die Taylor Reihnentwicklung für sin sind nicht gerade berauschend genau :D



Gruß Koschi

EDIT: Habe mal gerade noch bei Wiki Geschaut und der Coprozessor macht es unter anderem auch über den Cordic Algorithmus.http://de.wikipedia.org/wiki/Gleitkommaeinheit
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Koschi« (28.10.2010, 10:06)


7

28.10.2010, 10:19

Spannender als eine Sinus-Berechnung, die nur einem abstrakten Algorithmus aus Grundrechenarten folgt, ist für mich eher die Art, wie ein Computer die Grundrechenarten umsetzt. Alles darüber ist dann ja schon fast High-Level.



Also ein Multiplikation mit 2 dürfte wohl das Schieben des Registers nach links um eine Stelle sein, mit 4 um 2 Stellen, mit 8 um 3 Stellen und so weiter.

Addition könnte eine Oderverknüpfung sein mit so ner art Überlauf lauf wenn die jeweiligen Registerbits ne 1 haben.

Also so stelle ich mir mal so vor. Im Grund so wie wenn man dualzahlen auf dem Papier Addieren/Multiplizieren würde.



Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

28.10.2010, 10:20

EDIT: Habe mal gerade noch bei Wiki Geschaut und der Coprozessor macht es unter anderem auch über den Cordic Algorithmus.http://de.wikipedia.org/wiki/Gleitkommaeinheit

Ja dieser Algorithmus ist ja auch keine einfache Reihenentwicklung und wurde offenbar genau dafür entwickelt um grundlegende Funktionen in digitalen Schaltungen zu berechnen...

Werbeanzeige