etl/include
Roland Reichwein 9765cbf764
Fix format: float zero-padding, nested replacement width, octal alternate form, and extreme doubles (#1442)
format.h:
- Fix float zero-padding ({:010f}): output sign first, then zero-fill,
  then the unsigned formatted value, matching std::format behavior.
- Fix nested replacement fields ({:{}d}): consume the value's auto-index
  in parse_format_spec before parsing nested width/precision fields, so
  auto-indexing order matches the C++ standard.
- Fix {:#o} with value 0: produce "0" instead of "00" by skipping the
  octal prefix when the value is zero.
- Fix format_floating_default overflow for extreme doubles (DBL_MIN,
  DBL_MAX): fall back to scientific notation for values >= 1e18 or
  tiny positives < 1e-6, delegating to format_floating_e.
- Fix format_floating_e precision loss: replace iterative multiply-by-10
  normalization loop with O(1) log10/pow/floor computation.
- Add resolve_nested_replacements helper to extract width/precision
  from format args at formatting time.

test_format.cpp:
- Add tests for float zero-padding, nested replacement width, octal
  alternate form with zero, float sign/width/alignment, negative floats,
  scientific notation for large/small values, default-to-scientific
  switch, positive zero, brace escaping, and integer limits.

format.h + platform.h:
- log10l fix for different toolchain support:
  Define ETL_FORMAT_NO_LONG_DOUBLE_MATH in the profile if libm doesn't
  provide log10l. This is identified by linker error missing this symbol.
  It was identified with the llvm/clang cross toolchain for ARM.
2026-05-26 04:19:42 +01:00
..
etl Fix format: float zero-padding, nested replacement width, octal alternate form, and extreme doubles (#1442) 2026-05-26 04:19:42 +01:00