Forum: Compiler & IDEs float to string


von Max (Gast)


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.

von Fachlich Hervorragend (Gast)


Lesenswert?

Max schrieb:
> Ich möchte ein Gefühl für den Aufwand einer float=>string in z.B. printf
> bekommen.

Wozu?

Wenn es um die benötigte Rechenzeit geht: Die kann man messen.

von Max (Gast)


Lesenswert?

>Wozu?
Interesse!

von Peter Sielje (Gast)


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 ;)

von frame (Gast)


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.

von Klaus W. (mfgkw)


Lesenswert?

Max schrieb:
> Interesse!

Interesse?
Dann messe!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.