Hexfloat ('a'/'A') zero padding is placed before the sign and "0x" prefix
Los mantenedores suelen responder en 9 días
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 70/100
Línea de trabajo
La ruta hexfloat vive en el write() de float en include/fmt/format.h; encuentra la rama que maneja la presentación 'a'/'A' y observa cómo construye sign, '0x' y los dígitos antes de emitir mediante write_bytes en align::right. Compara con la ruta hexadecimal de enteros ("{:#012x}"), que ya inserta el padding después del prefijo. Reproduce con los tres ejemplos más fmt::sprintf, y luego ejecuta las pruebas de formato existentes. Está hecho cuando la salida coincida con printf y std::format, con ceros después de cualquier signo y el prefijo "0x".
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
With the 'a'/'A' presentation and the '0' flag, {fmt} puts the zero padding before the sign and the "0x" prefix:
fmt::format("{:012a}", 1.0) -> 0000000x1p+0
fmt::format("{:+012a}", 1.5) -> +0000x1.8p+0
fmt::format("{:012a}", -1.5) -> -0000x1.8p+0
printf("%012a", 1.0) -> 0x0000001p+0
Expected: 0x0000001p+0, +0x0001.8p+0, -0x0001.8p+0. C11 7.21.6.1 para 6 says leading zeros follow any sign or base indication, and std::format does the same. The integer path already does this right: fmt::format("{:#012x}", 0x1abc) gives 0x0000001abc. fmt::sprintf("%012a", ...) is affected too.
It looks like the hexfloat branch of the float write() in format.h builds sign + "0x" + digits and emits it with write_bytes at forced align::right, so the fill lands in front of the whole string.
fmt main @ 174569c, g++ 11.4.
I used AI tools to find and reproduce this; I reviewed it myself.
- Lenguaje dominante
- C++
- Estrellas
- 25.9k
- Forks
- 3.1k
- Merge medio
- 9 d 5 h
- PR fusionados (30 d)
- 13
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de fmtlib/fmt
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 9 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
fmtlib/fmt#5006 · 3 comentarios ·
Los mantenedores suelen responder en 9 días
-
Dificultad 3/5 1-2 días Aptitud para principiantes 63/100
Los mantenedores suelen responder en 9 días
-
<stdfloat>Quizá libre de nuevo @shreyas-s1403 la tomó hace 13 días y no hay ningún pull request abierto. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
fmtlib/fmt#4725 · 10 comentarios · 1 reacción ·
Los mantenedores suelen responder en 9 días
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
fmtlib/fmt#4518 · 1 comentario · 6 reacciones ·
Los mantenedores suelen responder en 9 días
Todos los issues de fmtlib/fmt
Issues similares
-
Linux npm packaging leaves workspace files that block subsequent CI checkoutPosiblemente ocupada @Spockkk0225 la tomó hoy. Abiertoci
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
alibaba/neug#1195 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 3 días
-
QA/No release-notes/exclude tests tests/missing-coverage tests/test-quality
Dificultad 2/5 1-3 horas Aptitud para principiantes 71/100
brave/brave-browser#61019 ·
Los mantenedores suelen responder en 1 día
-
? - Needs Triage bug CUTLASS C++
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 4 días