Bất kỳ dấu phẩy động nhị phân có thể được định dạng chính xác trong thập phân. Chuỗi kết quả có thể hơi dài, nhưng nó có thể. Trong bài viết của tôi về điểm nổi tôi đề cập đến tầm quan trọng của độ chính xác, và bây giờ tôi muốn chức năng này. Thách thức này là viết một chương trình hoặc hàm, lấy một giá trị dấu phẩy động làm đầu vào và định dạng một chuỗi thập phân chính xác làm đầu ra.
Để đảm bảo chúng tôi đang làm việc với các số dấu phẩy động chính xác, một định dạng chính xác phải được cung cấp làm đầu vào cho chương trình. Định dạng này sẽ là hai số nguyên Significand Exponent
, trong đó giá trị dấu phẩy động thực tế là Significand * 2 ^ Exponent
. Lưu ý rằng một trong hai giá trị có thể âm.
Cụ thể:
- Phạm vi và độ chính xác của ít nhất một float 32 bit phải được hỗ trợ (không có đầu vào nào vượt quá điều đó)
- Giá trị được định dạng thập phân phải là một đại diện chính xác (chỉ cần đủ gần để đảm bảo một đầu tròn chính xác trở lại nổi là không đủ tốt)
- Chúng tôi không tin tưởng các hàm định dạng dấu phẩy động thư viện chuẩn là đủ chính xác hoặc không đủ nhanh (ví dụ
printf
:) và do đó chúng có thể không được sử dụng. Bạn phải làm định dạng. Chức năng định dạng / chuyển đổi tích hợp được cho phép. - Có thể không có bất kỳ số 0 đứng đầu hoặc dấu nào, ngoại trừ số 0 bắt buộc đứng trước số 0
.
nếu không có thành phần số nguyên - Một chức năng, hoặc toàn bộ chương trình, được cho phép.
Ví dụ:
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
Mã ngắn nhất sẽ thắng.
.0
không?
0.abc
không phải là số 0 đứng đầu, thì đó abc.0
không phải là số 0 .
.0
toàn bộ số khi xử lý số dấu phẩy động. Xem ví dụ Python: str(1.0) == '1.0'
so str(1) == '1'
. Logic của bạn vẫn không nhất quán.