Мой вопрос не имеет практического применения. Мне просто интересно. Допустим, у меня есть значение типа double и я хочу получить его строковое представление аналогично функции printf
. Как бы я сделал это без библиотеки времени выполнения C? Предположим, у меня архитектура x86.
Как преобразовать двойное число в строку без использования CRT
Ответы (3)
Учитывая, что вы заявляете, что ваш вопрос не имеет практического применения, я полагаю, вы пытаетесь узнать о представлениях чисел с плавающей запятой.
Таким образом, если вы ищете решение без поддержки какой-либо библиотеки, начните с спецификация формата. Из этого вы можете различить различные «специальные» значения (бесконечность, NAN и т. д.), а также расшифровать/вычислить фактическое числовое значение. Когда у вас есть значение и показатель степени, вы знаете, где ставить десятичную точку. Вам придется написать собственную процедуру типа itoa. Для корней, которые являются степенью двойки, это может быть так же просто, как таблица поиска. Для десятичных чисел вам придется немного посчитать.
вы можете получить все значения слева (двойной % 10), а затем каждый раз делить на 10. они будут справа налево.
чтобы получить значения справа от точки, вы должны умножить на 10, а затем (двойной % 10). они будут слева направо.
Если вы хотите сделать это просто с "достаточно близким" результатом, см. мою статью http://www.exploringbinary.com/quick-and-dirty-floating-point-to-decimal-conversion/ . В нем описывается простая программа, которая использует числа с плавающей запятой для преобразования из числа с плавающей запятой в десятичное число, и объясняется, почему этот подход никогда не может быть точным для всех преобразований. (Программа не выполняет десятичное округление, как printf, но это должно быть достаточно легко добавить.)