-
-
Erfahrener Benutzer
Robotik Einstein
Die wichtigste Zeile ist diese:
for (j=0; j < decimal; j++) {value = value * 10;}
Da passiert folgendes:
Alle Stellen, die uns interessieren, werden vor das Komma gebracht. Dazu wird die Zahl oft genug mit 10 multipliziert.
Beispiel: aus 3.1425 wird, bei Ausgabe von 2 Nachkommastellen, dann 314.25
Der Nachkomma-Anteil wird dann nicht mehr berücksichtigt, und der Rest wie bei der Umwandlung von int in string gemacht. Also die Stellen einzeln betrachten und das passende Zeichen (Ascii-Wert von Null addieren) in den String schreiben. Dabei wird dann noch das Komma an der richtigen Stelle eingefügt.
Diese Umwandlung würde ich aber anders machen. Denn in deinem Code wird dann ständig mit value gerechnet, und das braucht viel Zeit. Ich würde lieber nach der Verschiebung des Kommas den interessanten Teil der Zahl in einen long int kopieren. Damit rechnet es sich deutlich schneller.
Je mehr ich die Funktion betrachte, desto mehr Optimierungspotential fällt mir auf. So könnte man die entscheidende Zeile
for (j=0; j < decimal; j++) {value = value * 10;}
durch
if(decimal>0) value = value * (10 * decimal);
ersetzen. Dann hat man in der gesamten Funkton nur noch eine einzige float-Multiplikation, und wäre deutlich schneller.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen