Każdy binarny zmiennoprzecinkowy można sformatować dokładnie w systemie dziesiętnym. Wynikowy ciąg może być nieco długi, ale jest to możliwe. W moim artykule o zmiennoprzecinkowym omawiam znaczenie precyzji, a teraz chcę tę funkcję. Wyzwaniem jest napisanie programu lub funkcji, która pobiera wartość zmiennoprzecinkową jako dane wejściowe i formatuje dokładny ciąg dziesiętny jako dane wyjściowe.
Aby mieć pewność, że pracujemy z prawidłowymi liczbami zmiennoprzecinkowymi, należy podać dokładny format danych wejściowych do programu. Ten format będzie dwiema liczbami całkowitymi Significand Exponent
, gdzie rzeczywista wartość zmiennoprzecinkowa to Significand * 2 ^ Exponent
. Zauważ, że każda wartość może być ujemna.
Specyfika:
- Zakres i precyzja co najmniej 32-bitowej liczby zmiennoprzecinkowej musi być obsługiwana (żadne dane wejściowe nie przekroczą tego)
- Wartość dziesiętna po sformatowaniu musi być dokładnym odwzorowaniem (po prostu wystarczająco blisko, aby zagwarantować, że prawidłowy powrót zaokrąglenia do pływaka nie jest wystarczająco dobry)
- Nie ufamy, że standardowe funkcje formatowania zmiennoprzecinkowego biblioteki są wystarczająco poprawne ani wystarczająco szybkie (np .:)
printf
, dlatego też nie mogą być używane. Musisz wykonać formatowanie. Zintegrowane funkcje formatowania / konwersji są dozwolone. - Nie może być żadnych zer wiodących ani końcowych, z wyjątkiem wymaganego jednego zera wiodącego przed,
.
jeśli nie ma składowej liczby całkowitej - Funkcja lub cały program jest dozwolona.
Przykłady:
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
Najkrótszy kod wygrywa.
.0
?
0.abc
nie jest wiodącym zerem, abc.0
to nie jest końcowe.
.0
liczbami całkowitymi w przypadku liczb zmiennoprzecinkowych. Zobacz na przykład Python: str(1.0) == '1.0'
versus str(1) == '1'
. Twoja logika jest nadal niespójna.