Jeder binäre Gleitkomma kann exakt dezimal formatiert werden. Die resultierende Zeichenfolge ist möglicherweise etwas lang, aber möglich. In meinem Artikel über Gleitkomma gehe ich auf die Bedeutung der Präzision ein und möchte nun diese Funktion. Diese Herausforderung besteht darin, ein Programm oder eine Funktion zu schreiben, die einen Gleitkommawert als Eingabe verwendet und eine exakte Dezimalzeichenfolge als Ausgabe formatiert.
Um sicherzustellen, dass wir mit den richtigen Gleitkommazahlen arbeiten, muss ein genaues Format als Eingabe für das Programm bereitgestellt werden. Dieses Format besteht aus zwei Ganzzahlen Significand Exponent
, wobei der tatsächliche Gleitkommawert ist Significand * 2 ^ Exponent
. Beachten Sie, dass jeder Wert negativ sein kann.
Besonderheiten:
- Der Bereich und die Genauigkeit von mindestens einem 32-Bit-Float müssen unterstützt werden (keine Eingabe geht darüber hinaus).
- Der dezimal formatierte Wert muss eine exakte Darstellung sein (einfach nah genug, um zu gewährleisten, dass eine korrekte Rundspitze zum Schweben nicht gut genug ist).
- Wir vertrauen nicht darauf, dass Standard-Gleitkomma-Formatierungsfunktionen für Bibliotheken korrekt genug oder schnell genug sind (z. B. :)
printf
, und daher werden sie möglicherweise nicht verwendet. Sie müssen die Formatierung vornehmen. Integrierte Formatierungs- / Konvertierungsfunktionen sind zulässig. - Es dürfen keine führenden oder nachfolgenden Nullen vorhanden sein, außer der erforderlichen führenden Null vor der,
.
wenn keine Ganzzahlkomponente vorhanden ist - Eine Funktion oder ein ganzes Programm ist zulässig.
Beispiele:
1 -2 => 0.25
17 -3 => 2.125
-123 11 => -251904
17 50 => 19140298416324608
23 -13 => 0.0028076171875
3 120 => 3987683987354747618711421180841033728
3 -50 => 0.00000000000000266453525910037569701671600341796875
-3 -50 => -0.00000000000000266453525910037569701671600341796875
10 -2 => 2.5
-12345 -3 => -1543.125
0 0 => 0
161 -4 => 10.0625
512 -3 => 64
Der kürzeste Code gewinnt.
.0
?
0.abc
es sich nicht um eine führende Null handelt, abc.0
handelt es sich nicht um eine nachfolgende Null .
.0
bei Gleitkommazahlen immer mit ganzen Zahlen zu enden . Siehe zum Beispiel Python: str(1.0) == '1.0'
versus str(1) == '1'
. Ihre Logik ist immer noch inkonsistent.