Herhangi bir ikili kayan nokta tam olarak ondalık olarak biçimlendirilebilir. Ortaya çıkan dize biraz uzun olabilir, ancak mümkündür. Gelen yüzen noktada yazımın ben hassasiyet önemini kapsar ve şimdi bu işlevi istiyorum. Bu zorluk, kayan nokta değerini girdi olarak alan ve kesin ondalık dizeyi çıktı olarak biçimlendiren bir program veya işlev yazmaktır.
Doğru kayan nokta sayılarıyla çalıştığımızdan emin olmak için, programa giriş olarak kesin bir format sağlanmalıdır. Bu biçim Significand Exponent
, gerçek kayan nokta değerinin olduğu iki tamsayı olacaktır Significand * 2 ^ Exponent
. Her iki değerin de negatif olabileceğini unutmayın.
Özellikleri:
- En az 32 bit şamandıra aralığı ve hassasiyeti desteklenmelidir (hiçbir girdi bunun ötesine geçmeyecektir)
- Ondalık biçimlendirilmiş değer tam bir temsil olmalıdır (şamandıraya doğru doğru bir yuvarlak uçun yeterince iyi olmadığını garanti etmek için yeterince yakın olmalıdır)
- Standart kütüphane kayan nokta biçimlendirme işlevlerinin yeterince doğru veya yeterince hızlı (örn:) olmasına güvenmiyoruz
printf
ve bu nedenle kullanılamayabilirler. Biçimlendirmeyi yapmanız gerekir. İntegral biçimlendirme / dönüştürme işlevlerine izin verilir. .
Tam sayı bileşeni yoksa önünde önde gelen sıfır hariç, önde gelen veya sondaki sıfırlar olmayabilir.- Bir işleve veya tüm programa izin verilir.
Örnekler:
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
En kısa kod kazanır.
.0
?
0.abc
sıfır değilse, o zaman abc.0
izleyen bir sıfır değildir.
.0
kayan nokta sayıları ile uğraşırken her zaman tam sayılarla bitirmek için bir kongre . Bkz. Örneğin Python: str(1.0) == '1.0'
versus str(1) == '1'
. Mantığınız hala tutarsız.