Будь-яка двійкова плаваюча точка може бути відформатована точно в десятковій частині. Отриманий рядок може бути дещо довгим, але це можливо. У своїй статті про плаваючу крапку я висвітлюю важливість точності, і тепер я хочу цю функцію. Завдання полягає в тому, щоб написати програму або функцію, яка приймає значення вхідного сигналу з плаваючою комою і формує точний десятковий рядок як вихід.
Щоб переконатися, що ми працюємо з правильними числами з плаваючою комою, повинен бути наданий точний формат як вхід до програми. Цей формат буде двома цілими числами Significand Exponent
, де фактичне значення з плаваючою комою Significand * 2 ^ Exponent
. Зауважте, що будь-яке значення може бути негативним.
Особливості:
- Необхідно підтримувати дальність і точність принаймні 32-бітового поплавця (жоден вхід не перевищує цього)
- Десяткове відформатоване значення повинно бути точним поданням (просто достатньо близько, щоб гарантувати правильний круглий наконечник назад, щоб плавати, недостатньо добре)
- Ми не довіряємо стандартним функціям форматування з плаваючою точкою бібліотеки бути достатньо правильними або досить швидкими (наприклад:)
printf
, і тому вони можуть не використовуватися. Ви повинні виконати форматування. Дозволені функції інтегрального форматування / перетворення. - Не може бути жодних провідних або кінцевих нулів, за винятком необхідного одного ведучого нуля перед,
.
якщо немає цілого числового компонента - Функція або вся програма дозволена.
Приклади:
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
Найкоротший код виграє.
.0
?
0.abc
це не первинний нуль, то abc.0
це не трейлінг.
.0
на цілі числа при роботі з числами з плаваючою комою. Дивіться, наприклад, Python: str(1.0) == '1.0'
versus str(1) == '1'
. Ваша логіка досі непослідовна.