float to string

Gast #2813615
Lesenswert?

Ich möchte ein Gefühl für den Aufwand einer float=>string in z.B. printf 
bekommen. Ich habe schon in diversen libc-Implementierungen gesucht, 
diese sind - für einen der keine Ahnung hat, wie der Algorithmus 
überhaupt funktioniert - aber nur sehr schwer zu verstehen.
Kennt jemand eine übersichtliche Implementierung, oder kann mir jemand 
die prinzipielle Vorgehensweise erklären.
Gast #2814359
Lesenswert?

Nun, etwas anderes als den Original-Code oder den daraus erzeugten 
Assembler-Code wirst du dir nicht anschauen können. Wenn du daraus nicht 
schlau wirst... dann wirst du daraus nicht schlau ;)
Gast #2814378
Lesenswert?

Nachdenken und selber schreiben.

Hat im Moment vielleicht keinen Nutzen, aber später.
Erstens lernt man aus jeder erfolgreichen oder auch fehlgeschlagenen 
Implementierung (normalerweise ...).
Und zweitens sind solche Routinen in "bare metal" Projekten häufig von 
Nutzen. Ich habe z.B. selbstgeschriebene Routinen zur Wandlung von 16/32 
Bit integer zu String, die für UART-Debugzwecke häufig einsetze.
Das spart oft deutlich an Codegröße gegenüber der libc.
Moderator Persönliche Seite #2814460
Lesenswert?

Ansonsten gibt's Abhandlungen über sowas auf totem Baum.  Haben
unsere Vorfahren alles aufgeschrieben.

Hier zum Beispiel gibt's sowas:

http://www.amazon.de/Arithmetische-Algorithmen-Mikrorechentechnik-G%C3%BCnter-Jorke/dp/3341005153

Für meine erste avr-libc-Implementierung habe ich seinerzeit den
alten Unix-Sourcecode (V7) gewälzt.  Das Ergebnis kannst du dir
beispielsweise hier ansehen:

http://svn.savannah.nongnu.org/viewvc/trunk/avr-libc/libc/stdio/vfprintf.c?revision=191&root=avr-libc&view=markup

Inzwischen hat das allerdings Dmitry Xmelkov alles komplett
umgeschrieben, damit es effizienter wird.  Die Kernroutine seier
Konvertierung findest du hier:

http://svn.savannah.nongnu.org/viewvc/trunk/avr-libc/libc/stdlib/ftoa_engine.S?revision=2191&root=avr-libc&view=markup

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