Qualsiasi virgola mobile binaria può essere formattato esattamente in decimale. La stringa risultante potrebbe essere piuttosto lunga, ma è possibile. Nel mio articolo su virgola mobile tratterò l'importanza della precisione e ora voglio questa funzione. Questa sfida è scrivere un programma o una funzione che accetta un valore in virgola mobile come input e formatta una stringa decimale esatta come output.
Per garantire che stiamo lavorando con i numeri in virgola mobile corretti, è necessario fornire un formato preciso come input per il programma. Questo formato sarà di due numeri interi Significand Exponent
, dove si trova il valore in virgola mobile effettivo Significand * 2 ^ Exponent
. Si noti che entrambi i valori possono essere negativi.
specifiche:
- L'intervallo e la precisione di almeno un float a 32 bit devono essere supportati (nessun input andrà oltre)
- Il valore formattato decimale deve essere una rappresentazione esatta (semplicemente abbastanza vicino da garantire che un ritorno corretto al float non sia abbastanza buono)
- Non ci fidiamo che le funzioni di formattazione in virgola mobile della libreria standard siano abbastanza corrette né abbastanza veloci (es:)
printf
, e quindi non possono essere utilizzate. È necessario eseguire la formattazione. Sono consentite funzioni di formattazione / conversione integrate. - Non possono esserci zeri iniziali o finali, ad eccezione di uno zero iniziale richiesto davanti allo zero
.
se non vi è alcun numero intero componente - È consentita una funzione o l'intero programma.
Esempi:
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
Il codice più corto vince.
.0
?
0.abc
non è uno zero iniziale, allora non è uno zero abc.0
finale.
.0
numeri interi quando si tratta di numeri in virgola mobile. Vedi ad esempio Python: str(1.0) == '1.0'
contro str(1) == '1'
. La tua logica è ancora incoerente.