mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik QNAN bei Floatmultiplikation auf 8051F und Keil


Autor: AKKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

bei der Operation
y[0] = ((ACoef[0]) * (x[0]));
bekomme ich 1.#QNAN als Ergebnis.
Was bedeutet das?
In ACoef[0] steht 2,433e-13
In x[0] steht 1,899e+7
float iir(float NewSample) {

    idata float ACoef[NCoef+1] = {
        0.00000000000024335396,
        0.00000000000194683167,
        0.00000000000681391085,
        0.00000000001362782170,
        0.00000000001703477712,
        0.00000000001362782170,
        0.00000000000681391085,
        0.00000000000194683167,
        0.00000000000024335396
    };

    idata float BCoef[NCoef+1] = {
        1.00000000000000000000,
        -7.70663582543307600000,
        25.98811769708422400000,
        -50.08564889641004900000,
        60.33895663605833400000,
        -46.52942830250031400000,
        22.42862119389475600000,
        -6.17879494249887260000,
        0.74481243984022838000
    };

    static float y[NCoef+1]; //output samples
    static float x[NCoef+1]; //input samples
    int n;
  idata float test;

    //shift the old samples
    for(n=NCoef; n>0; n--) {
       x[n] = x[n-1];
       y[n] = y[n-1];
    }

    //Calculate the new output
    x[0] = NewSample;
    y[0] = ((ACoef[0]) * (x[0]));
    for(n=1; n<=NCoef; n++)
        y[0] += ACoef[n] * x[n] - BCoef[n] * y[n];
    
    return y[0];
}

Autor: Karlheinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem aktuellen 8051-Compiler und Debugger erhalte ich als Ergebnis 
der Multiplikation: 4.620267e-006.

Ansonsten solltes du das ganze Programm posten, da sich dein Fragment 
nicht compilieren läßt.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann den Fehler hier auch nicht nachvollziehen:
Keil uVision V3.62c, PK51 Pro V9
Target war zum einen der Simulator und ein C8051F585

Autor: AKKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wäre es wohl möglich dass der µC bei der Berechnung der Multiplikation 
irgendwo Teilen muss, und deswegen vielleicht durch 0 teilt?
Eine Floatmultiplikation bedarf ja doch einer ganzen Menge an 
Rechenschritten auf so einem 8 Bitter.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.