- LiFePO4 Speicher Test         
Ergebnis 1 bis 7 von 7

Thema: Float verhindern

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Hallo,
    das "Bruchrechnen" habe ich in meinen Projekten auch verwendet. Der Bruch sollte dabei so weit wie möglich gekürzt werden. Auf möglichen Überlauf hat Peter(TOO) bereits hingewiesen. Zudem muss auch beim Teilen durch große Zahlen beachtet werden, dass aufgrund des ganzzahligen Teilens ohne Rest Genauigkeit verloren gehen kann.

    22 Shifts im obigen Code brauchen ohne Barrel Shifter auch viele Takte. Das Schieben kann auch auf das nächste Vielfache von 8 Bit geschehen, der Zugriff kann dann auf die einzelnen Bytes erfolgen:
    Code:
        //Vorraussetzung: Little Endian
        lsbyte0=*(((uint8_t*)(&variablemit32bit))+0);
        byte1=*(((uint8_t*)(&variablemit32bit))+1);
        byte2=*(((uint8_t*)(&variablemit32bit))+2);
        msbyte3=*(((uint8_t*)(&variablemit32bit))+3);
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Bernhard,
    Zitat Zitat von BMS Beitrag anzeigen
    Zudem muss auch beim Teilen durch große Zahlen beachtet werden, dass aufgrund des ganzzahligen Teilens ohne Rest Genauigkeit verloren gehen kann.
    Da muss man eben optimieren. Den Bruch so klein wie möglich, aber so gross, dass man die benötigte Genauigkeit noch erreicht!
    Aber gefragt wurde nach einem Fehler im Bereich von 1% und das ist eigentlich kein Problem.
    Zitat Zitat von BMS Beitrag anzeigen
    22 Shifts im obigen Code brauchen ohne Barrel Shifter auch viele Takte. Das Schieben kann auch auf das nächste Vielfache von 8 Bit geschehen, der Zugriff kann dann auf die einzelnen Bytes erfolgen.
    Das ist im Allgemeinen aber der Job des Compilerherstellers, dass er optimalen Code erzeugt.

    Bei manchen CPUs ist eine Integermultiplikation schneller als mehrere Left-Shifts.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    Zum weiteren Optimieren, sollte man auch noch versuchen den Nenner als eine 2er Potenz zu wählen.

    Der AVR kann zwar multiplizieren, zum Dividieren gibt es aber keinen Befehl. Hier muss also emuliert werden, außer es handelt sich um eine 2er Potenz, dann kann man das Ergebnis einfach nach rechts schieben.

Ähnliche Themen

  1. Relais anziehen beim anstecken verhindern?
    Von Filozof im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 6
    Letzter Beitrag: 18.12.2008, 11:38
  2. mehrfaches Auswerten einer IF/Then Bedingung verhindern
    Von mat-sche im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 30.11.2008, 09:36
  3. Pulsüberschläge gegen Masse verhindern ?
    Von magic33 im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 17.11.2007, 12:33
  4. HILFE: Ledlauflicht Stacküberlauf verhindern
    Von Matthiasbaue im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 17
    Letzter Beitrag: 06.11.2006, 14:13
  5. Transitor - Teilleiten verhindern
    Von 2H2+O2=2H2O im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 27.04.2006, 22:35

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress