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.
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.
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 ;)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.