Probleme mit atof

Gast #177709
Lesenswert?

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 #177711
Lesenswert?

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 #177714
Lesenswert?

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 #177716
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren