Probleme mit atof

Gast #177709
Hallo,
ich habe Probleme mit atof.
Ich möchte in meinen Atmega8 eine double Zahl, die ich über USART in
einen String einlese mit atof in eine double umwandeln um mit Ihr
weiter zurechnen.

double zahl;
...
zahl=atof("1");

Ich bekomme für den String "1" aber 1.626e+04 als Ergebnis.
Wo liegt mein Fehler?
Gast
Danke für die Idee, aber das Ergebnis ist das selbe.
Egal welchen Wert ich eingebe mit Punkt oder ohne der Wert liegt immer
in der Nähe von diesen Wert.
1 -> 1.626e+4
2 -> 1.638e+4
3 -> 1.645e+4
4 -> 1.651e+4
5 -> 1.654e+4

1.4241 -> 1.631e+4

Ich vermute das das eine Eigenart des Prozessor ist und mit der
Speicherverwaltung zusammen hängt.
Aber ich weiß es nicht.
Gruß Try
Gast
Das ist die Compiler-Version, aber ich denke, Du hast die gleiche
avr-libc, die ich auch hier grad vor mir habe. Und bei der finde ich in
der stdlib.h (Version 1.14.2.3 vom 2004/03/08) folgenden Hinweis:

#if 0  /* not yet implemented */
[..]
extern double atof(const char *);
[..]
#endif

Damit wirst Du wohl wenig Erfolg haben. Du wirst Dir atof leider selber
bauen müssen.
Gast
Hoppla, Oldbug, schreibe mal bitte einen Bugreport dafür auf der
avr-libc Homepage.

Nein, atof() gibt's, sonst hätte es ja auch einen Linkerfehler
gegeben.  Ist am Ende ein Kurzschluß auf die Standardfunktion strtod()
(da es nur drei Assemblerbefehle sind, ist das sogar im gleichen
Sourcefile implementiert, d. h. wenn man strtod() benutzt, bekommt man
immer auch gleich atof() mit).

Wenn's unbedingt atof() sein soll, einfach vorerst mal im eigenen
Sourcecode entsprechend deklarieren.  Das Problem entsteht nur daraus,
daß in der Quelle atof() nicht deklariert ist, so daß der Compiler es
implizit als einen `int' zurückgebend annimmt.  (Darüber sollte er
eigentlich auch 'ne Warnung von sich geben...)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.