私は例えば、libquadmathを使用して__float128をprintfのしようとしている次の3 constaintsで__float128が情報を失わないために必要なprintf精度は何ですか?
quadmath_snprintf(s, sizeof(s), "%.30Qg", f);
:
を出力は、次の生産と一致している必要があります
number = [ minus ] int [ frac ] [ exp ] decimal-point = %x2E ; . digit1-9 = %x31-39 ; 1-9 e = %x65/%x45 ; e E exp = e [ minus/plus ] 1*DIGIT frac = decimal-point 1*DIGIT int = zero/(digit1-9 *DIGIT) minus = %x2D ; - plus = %x2B ; + zero = %x30 ; 0
上記のプロダクション "s"と一致する文字列にprintfedされた任意の入力__float128 "i"を与え、 "s"を__floaにスキャンフィードしますt128 "j" - "i"は "j"とビット単位で同じでなければなりません。つまり、情報は失われません。少なくともいくつかの値についてはこれはできません(NaN、Infinity)、それらの値の完全なリストは何ですか?
上記の2つの基準を満たす他の文字列は、候補よりも短いはずです。
上記を満たすquadmath_snprintf形式の文字列(可能な場合は1と3と2)はありますか?もしそうなら、それは何ですか?
上記の生産でポイント2を満たすのに十分正確に表現できない__float128の値は何ですか? (例えば、Nan、+/- Infinityなど)__float128がこれらの値のいずれかを保持しているかどうかを検出するにはどうすればよいですか?
__float128で正確に表現できない無限の小数点セットがあります。 34桁以上の有効桁があるもの書式指定子は、絶対値> = 1E5の場合にランダムな数字を生成します。あなたのアプローチに深刻な欠陥があります。おそらく、問題を解決するために__float128が必要であると考えて開始します。 –
__float128で正確に表現することができない無限の10進数があるという事実は無関係です。ポイント2は、読み返して丸めたときと同じように十進数表現が正確であることを要求します。書式指定子が間違っていることを認識すると、正しい質問が表示されます。私の「アプローチ」はうまくいき、どんな問題を解決しようとしているのか分かりません。 –