Hexfloat ('a'/'A') zero padding is placed before the sign and "0x" prefix
メンテナーはふだん 9 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
hexfloat のパスは include/fmt/format.h の float の write() にあります。'a'/'A' プレゼンテーションを処理する分岐を見つけ、align::right で write_bytes を介して出力する前に、sign、'0x'、数字をどのように組み立てているかを確認してください。プレフィックスの後にすでにパディングを挿入している整数の16進パス("{:#012x}")と比較してください。3つの例と fmt::sprintf で再現し、その後、既存の format テストを実行してください。出力が printf と std::format に一致し、任意の符号の後にゼロが続き、"0x" プレフィックスが付いていれば完了です。
索引モデルが issue の本文から書いたものです。
説明
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.
- 主要言語
- C++
- スター
- 25.9k
- フォーク
- 3.1k
- 平均マージ
- 9日 5時間
- マージ済み PR(30日)
- 13
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
fmtlib/fmt のほかの issue
-
fmt::formatted_size does not work with fmt::wformat_string対応中かも @Tyagiquamar が 1 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 9 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
メンテナーはふだん 9 日以内に返信
-
難易度 3/5 1〜2日 初心者へのやさしさ 63/100
メンテナーはふだん 9 日以内に返信
-
<stdfloat>再び着手できるかも @shreyas-s1403 が 13 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
fmtlib/fmt#4725 · コメント 10 件 · リアクション 1 件 ·
メンテナーはふだん 9 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
fmtlib/fmt#4518 · コメント 1 件 · リアクション 6 件 ·
メンテナーはふだん 9 日以内に返信
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 62/100
mw00/project-maya#877 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
llvm/offload-test-suite#1703 ·
メンテナーはふだん 1 日以内に返信
-
backlog bug
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
EchoTools/nevr-runtime#2154 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
BGI-shenzhen/PopLDdecay#25 ·