Любая двоичная с плавающей точкой может быть отформатирована точно в десятичном формате. Результирующая строка может быть несколько длинной, но это возможно. В моей статье о плавающей запятой я рассказываю о важности точности, и теперь я хочу эту функцию. Эта задача состоит в том, чтобы написать программу или функцию, которая принимает значение с плавающей запятой в качестве входных данных и форматирует точную десятичную строку в качестве выходных данных.
Чтобы убедиться, что мы работаем с правильными числами с плавающей запятой, в качестве входных данных для программы должен быть указан точный формат. Этот формат будет двумя целыми числами 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'
против str(1) == '1'
. Ваша логика все еще противоречива.