|
dconv 2.0
C++14 library for printing and parsing floating point numbers
|
dconv: header-only C++20 double ⇄ string library (dconv/include/dconv/), used by join. Tests in dconv/tests/, table generators in tools/.
Presets gcc|clang x debug|release|asan (debug = coverage), trees in build/<compiler>/<kind>. -Werror is on.
dconv::dtoa -> schubfach::dtoa. Each algorithm (schubfach, grisu, grisu2, grisu3) has generate (buffer, length, k, value); the Grisu family renders it through the grisu.hpp driver and details::prettify, while schubfach::dtoa calls shortest then details::format; grisu3 falls back to std::to_chars.details::atod<Probe>. StringProbe seeks back to re-parse > 19 digits; StreamProbe never rewinds, so they go to atodLong (Eisel-Lemire bracketing, strtod only on disagreement). Errc::NotDouble reports 64-bit integers.*pow.hpp): generated by tools/*powgen.Skills in .agents/skills/<name>/SKILL.md: compile, test, coverage, conformance, performance, add-gtest, gen-tables, create-pr, release; <scratchpad> in them is a temporary directory outside the repository. Run clang-format on changed C++ files at the version pinned in .github/workflows/build.yml.
Changes to AGENTS.md and .agents/ keep them tool-agnostic and short; .claude/ is Claude Code only.
gcc-debug, the relevant test only, once the batch is reviewed (not after each edit). Renames: diff and clang-format only. Design still moving: code and benchmarks only.debug, release, asan pass; coverage not degraded; if conversion code changed, conformance and performance not degraded; README.md updated if the API or behaviour changes, else say none needed.Report what ran; never call a partial pass done. A missing tool or wrong version: ask before installing (sudo if justified), else give the command with the ! prefix, and report the item not verified.
<scratchpad> worktrees for measurements) and each PR (skill create-pr); read-only ones are fine. Never force-push, push to main or merge.build/ or generated version.hpp files.