long double в printf на Redox: числа повышенной точности печатаются правильно
04.03.2026Форматирование чисел в printf в relibc научилось понимать long double. Раньше значения повышенной точности выводились неверно.
Что такое long double
В обычной практике double хватает: 15–16 значащих цифр, ошибка примерно 10-16 от масштаба. Но есть задачи, где этого мало — численные расчёты, где накапливается ошибка, и результат нужно показать с большим числом знаков.
Тип long double даёт больше значащих цифр за счёт хранения мантиссы в 80-битном регистре на платформе x86. Он есть не везде, и на разных платформах имеет разный размер, поэтому код на C с ним требует осторожности.
Что было не так
Функция форматирования не знала про этот тип. Для double и float разбор шёл своим путём, а long double обрабатывался как нечто другое, и на выходе получалось неверное число — либо ошибка формата.
На практике это означало, что программа, которая считает и печатает результат с повышенной точностью, показывала мусор. Считает правильно — печатает неправильно: такой дефект обычно ищут не в том месте.
Почему это касается Rust
printf — не единственный путь вывода. В Rust числа форматируются через Display и Debug, и там f64 — единый тип. Но printf остаётся востребованным: код, перенесённый с C, продолжает его использовать, а через внешние интерфейсы тип long double иногда приходит из других языков.
То есть исправление снимает ошибку на границе между мирами — там, где Rust-код вызывает функцию C или читает значение из чужой библиотеки.
Оригинал
Коммит Implement long double in printf от 4 марта 2026 года в репозитории redox-os/relibc; сводка «This Month in Redox — March 2026», раздел «Relibc Improvements»
Упоминаний: 1 · Просмотров: 3