- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: (s)printf mit double liefert '?'...

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009

    (s)printf mit double liefert '?'...

    Anzeige

    E-Bike
    Moin.

    Und mal wieder ein Problem in C:
    Von einem Temperatursensor (DS1629) soll die Temperatur gelesen und angezeigt werden. Idealerweise wird dazu ein Algorithmus nach Datenblatt verwendet, der eine höhere Auflösung als die bei 9 Bit üblichen 0,5°C bietet.
    Das Ergebnis muss hier natürlich als double gespeichert werden (irgend ein Integer bringt dann nicht viel).

    Problem ist jetzt: Wenn ich versuche, diesen double-Wert per printf oder sprintf auszugeben, dann ist der angezeigte Wert ein Fragezeichen (?).

    Also das hier
    Code:
    sprintf(lcdtext, "Temp: %+3.2f", DS1629_GetTempPrecise());
    kopft mir in die Variable lcdtext "Temp: ?" rein.

    Wo liegt hier der Fehler?

    mfG
    #ifndef MfG
    #define MfG

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Also wenns float/double sein muss würd ichs erstmal mit dem einfachsten möglichen Formatstring versuchen, also nur %f.


    Was ich allerdings nicht verstehe ist, wieso du meinst double verwenden zu müssen?
    Eigentlich geht doch immer alles auch mit Festkommazahlen, wenn auch vielleicht nicht ganz so bequem wie mit floats.
    So viele Treppen und so wenig Zeit!

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Das Ergebnis muss hier natürlich als double gespeichert werden (irgend ein Integer bringt dann nicht viel).
    Das bezweifle ich stark.

    Wenn ich versuche, diesen double-Wert per printf oder sprintf auszugeben, dann ist der angezeigte Wert ein Fragezeichen (?).
    Da hast du wohl vergessen, dem Linker mitzuteilen, dass er statt der normalen die Floating-Point-Variante von printf dazu linken soll.
    MfG
    Stefan

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Thxle. Kaum sagt man dem Linker das, schon läufts.
    Das mit double war noch irgendwie in Erinnerung, dass dieser Typ für unterschiedliche Zahlen mit Nachkommastellen am sinnvollsten sei.
    #ifndef MfG
    #define MfG

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Zitat Zitat von Jaecko
    Das mit double war noch irgendwie in Erinnerung, dass dieser Typ für unterschiedliche Zahlen mit Nachkommastellen am sinnvollsten sei.
    kommt drauf an...

    float und double sind Fließkommazahlen, die Position des Kommas also variabel. Das ist zwar bequem, da man nichts selbst umrechnen muss, aber dafür ist es auch verdammt langsam auf Controllern die keine FPU (Floating Point Unit) haben.


    Prinzipiell kann man aber auch nahezu jede beliebige Berechnung mit Integern durchführen. Die Temperatur muss ja nicht in °C angegeben werden, es spricht doch nichts dagegen stattdessen z.B. 1/1000°C zu verwenden.

    Dann entspräche der Wert 1352 der Temperaturvariable eben einer Temperatur von 1,352°C. Das ist bei der Ausgabe auf einem Display zwar umständlicher, aber der Controller kann viel schneller damit rechnen.
    So viele Treppen und so wenig Zeit!

Berechtigungen

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

Solar Speicher und Akkus Tests