Setiap titik mengambang biner dapat diformat dengan tepat dalam desimal. String yang dihasilkan mungkin agak panjang, tetapi itu mungkin. Dalam artikel saya tentang floating point, saya membahas pentingnya presisi, dan sekarang saya ingin fungsi ini. Tantangan ini adalah untuk menulis sebuah program, atau fungsi, yang mengambil nilai floating point sebagai input dan memformat string desimal yang tepat sebagai output.
Untuk memastikan kami bekerja dengan angka floating point yang benar, format yang tepat harus diberikan sebagai input ke program. Format ini akan menjadi dua bilangan bulat Significand Exponent
, di mana nilai floating point yang sebenarnya adalah Significand * 2 ^ Exponent
. Perhatikan bahwa nilai mana pun bisa negatif.
Spesifik:
- Kisaran dan ketepatan setidaknya float 32-bit harus didukung (tidak ada input yang akan melampaui itu)
- Nilai yang diformat desimal harus merupakan representasi yang tepat (cukup dekat untuk menjamin round-tip kembali ke float tidak cukup baik)
- Kami tidak mempercayai fungsi format floating point pustaka standar untuk menjadi cukup benar atau cukup cepat (mis .:)
printf
, dan karenanya fungsi itu mungkin tidak digunakan. Anda harus melakukan pemformatan. Fungsi pemformatan / konversi integral diizinkan. - Mungkin tidak ada nol di depan atau di belakang, kecuali untuk nol di depan yang diperlukan
.
jika tidak ada komponen bilangan bulat - Fungsi, atau seluruh program, diizinkan.
Contoh:
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
Kode terpendek menang.
.0
?
0.abc
bukan nol awal, maka abc.0
bukan yang tertinggal.
.0
angka bulat ketika berhadapan dengan angka floating point. Lihat misalnya Python: str(1.0) == '1.0'
versus str(1) == '1'
. Logika Anda masih tidak konsisten.