Я пытаюсь воссоздать printf, и в настоящее время я пытаюсь найти способ обработки спецификаторов преобразования, которые имеют дело с числами с плавающей точкой. Более конкретно: я пытаюсь округлить двойные в определенном десятичном месте. Теперь у меня есть следующий код:
double ft_round(double value, int precision)
{
long long int power;
long long int result;
power = ft_power(10, precision);
result = (long long int) (value * power);
return ((double)result / power);
}
, который работает для относительно небольших чисел (я не совсем понял, компенсирует ли printf ошибки усечения и округления, вызванные этим, но это уже другая история). Тем не менее, если я попробую большое число, например
-154584942443242549.213565124235
Я получаю -922337203685.4775391
в качестве вывода, тогда как сам printf дает мне
-154584942443242560.0000000
(точность для обоих выходов равна 7).
И то, и другое не совсем то, что я ожидал, но мне интересно, можете ли вы помочь мне понять, как я могу реализовать мою идею округления до больших чисел.
Мой вопрос в основном состоит из двух частей:
- Что именно происходит в этом случае как с моим кодом, так и с самим printf, что вызывает этот вывод? (Я довольно новичок в программировании, извините, если это глупый вопрос)
- Ребята, есть ли у вас какие-либо советы о том, как сделать мой код способным обрабатывать эти большие числа?
P.S. Я знаю, что есть библиотеки и тому подобное, чтобы выполнить округление, но я ищу ответ типа «изобретать за рулем» здесь, только к вашему сведению!