code in integer arithmetik übersetzen

Gast #918442
Hallo,
folgenden Codeteil soll ich in integer arithmetik übersetzen, da der 
Controller keine floating point unit besitzt, und somit nur über eine 
library float zahlen rechnen könnte, was zu einr zu langen rechenzeit 
führen würde. Was muss ich beim überetzen in integer arithetik beachten?

Gruß
Samuel


double xv0, xv1 = 0.0, uf, phi = 1.2566370614e+05;




"voltage"-controlled oscillator */
        phi += (uf *  2.2222222222e-05);  /* T */
        while (phi < -PI) phi += TWOPI;
        while (phi >= +PI) phi -= TWOPI;
        /* phase detector */
        double ud = in.im * cos(phi) - in.re * sin(phi);
        /* loop filter (hf gain = tau2/tau1) */
        xv0 = xv1;
        xv1 =  1.7944313386e+03 * ud;    /* (tau2/tau1) / G */
        uf += (xv1 -  9.8044334903e-01 * xv0);  /* C */
        return phi;
#918445
Du solltest beachten, dass du mit normalen (32bit) Integern nie und 
nimmer auch nur annährend die Genauigkeit von Double erreichen wirst, 
zumindest nicht ohne ähnlich viel Speicher wie die Libs zu verbrauchen.

Nimmst du dann 64bit Ints hast du riesige und langsame modulo-, div und 
mul Operationen.

Probier doch erstmal float.
Gast #918459
Nötige Genauigkeit kontrollieren und verringern.
Mit den vielen Nachkommastellen in den Konstanten sieht das schlecht 
aus.
In eine Festpunktzahl mit 32 Bit passen eben maximal knapp 9 Stellen.
Und du bist in den Konstanten von 2.22e-05 bis 1.25e+05 unterwegs, das 
sind schon ganz ohne weitere Berechnungen 10 Kommastellen.

Wenn die genauigkeit von 32 Bit ausreicht:
Sieh dir mal die Festpunktarithmetik von DSPs an, hier war der 
Wertebereich von -1..+1, und die Berechnungen sind recht einfach. Aber 
da musst du dein ganzes Modell etwas umskalieren.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.