Ich würde die Beschreibung als "Code" umformulieren, der einen Typ in eine andere Darstellung umwandelt , um etwas zu tun, was im Original genauso gut oder besser hätte gemacht werden können, und es dann wieder zurück umwandeln andere Art, wirken auf mich, und sich zurück Umwandlung ist völlig angemessen und Versagen zu tun , würde zu falschem Verhalten so führen.
Ein Beispiel für eine gute Konvertierung:
Man hat vier float
Werte von beliebigen Vorzeichen, deren Größen sich um einen Faktor von bis zu 1.000 unterscheiden können, und man muss die Summe zuletzt auf 0,625 Einheiten genau berechnen. Das Konvertieren aller vier Werte in double
, das Berechnen der Summe und das Zurückkonvertieren des Ergebnisses in float
ist wesentlich effizienter als dies bei einem Ansatz float
allein der Fall wäre .
Gleitkommawerte sind bestenfalls auf 0,5 Einheiten (ULP) genau. Dieses Beispiel würde erfordern, dass der Worst-Case-Rundungsfehler nicht mehr als 25% über dem optimalen Worst-Case-Fehler liegt. Die Verwendung eines Doppels ergibt einen Wert, der innerhalb von 0,5001 ULP genau ist. Während eine ULP-Anforderung von 0,625 erfunden zu sein scheint, sind solche Anforderungen in sukzessiven Approximationsalgorithmen häufig wichtig. Je genauer die Fehlergrenze angegeben wird, desto geringer ist die Anforderung an die Iteration im ungünstigsten Fall.
Ein Beispiel für eine schlechte Konvertierung:
Man hat eine Gleitkommazahl und möchte einen String ausgeben, der seinen Wert eindeutig darstellt. Ein Ansatz besteht darin, die Zahl in eine Zeichenfolge mit einer bestimmten Anzahl von Ziffern zu konvertieren, sie zurück zu konvertieren und zu prüfen, ob das Ergebnis übereinstimmt.
Aber das ist eigentlich ein schlechter Ansatz. Wenn eine Dezimalzeichenfolge einen Wert darstellt, der fast genau auf dem halben Weg zwischen zwei Gleitkommawerten liegt, ist es für eine Zeichenfolge-zu-Gleitkomma-Methode ziemlich teuer, sicherzustellen, dass sie immer den näheren float
Wert ergibt, und viele solche Konvertierungsmethoden geben keinen Wert an Halten Sie eine solche Garantie nicht ein (unter anderem würde dies in einigen Fällen das Lesen aller Ziffern einer Zahl erfordern, selbst wenn sie Milliarden von Ziffern lang wäre).
Es ist viel billiger für eine Methode, zu garantieren, dass sie immer einen Wert zurückgibt, der innerhalb von 0,5625 Einheiten an der letzten Stelle (ULP) des dargestellten Werts liegt. Eine robuste "umkehrbare" Formatierungsroutine von Dezimal zu Zeichenfolge sollte berechnen, wie weit der Ausgabewert vom korrekten Wert entfernt ist, und die Ausgabe von Ziffern fortsetzen, bis das Ergebnis innerhalb von 0,375 (ULP) liegt, wenn nicht 0,25 (ULP). Andernfalls wird möglicherweise eine Zeichenfolge ausgegeben, die einige Konvertierungsmethoden ordnungsgemäß verarbeiten, andere Konvertierungsmethoden jedoch nicht.
Manchmal ist es besser, eine Ziffer auszugeben, die möglicherweise nicht "notwendig" ist, als einen Wert auszugeben, der möglicherweise falsch interpretiert wird. Entscheidend ist, dass die Entscheidung darüber, wie viele Ziffern ausgegeben werden sollen, auf numerischen Berechnungen im Zusammenhang mit dem Ausgabeprozess und nicht auf dem Ergebnis des Versuchs einer bestimmten Methode, die Zeichenfolge wieder in eine Zahl umzuwandeln, basiert.