我試圖用libquadmath對printf __float128,如:__float128需要什麼printf精度纔不會丟失信息?
quadmath_snprintf(s, sizeof(s), "%.30Qg", f);
以下三個constaints:
輸出必須以下生產相匹配:
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
給定任何輸入__float128「i」已經被打印到與上述生產「s」匹配的字符串,然後「s」被掃描回到__floa t128「j」 - 「i」必須與「j」按位相同 - 即不應丟失任何信息。至少有一些值是不可能的(NaN,Infinity),這些值的完整列表是什麼?
應該沒有其他字符串滿足上述兩個標準,即比候選人短。
是否有一個quadmath_snprintf格式字符串滿足上述(可能的話1,3和2)?如果是這樣,它是什麼?
__float128的哪些值無法通過上述生產滿足第2點的要求? (例如Nan,+/- Infinity等)如何檢測__float128是否保存這些值之一?
有一組無法在__float128中精確表示的十進制數。任何有超過34位有效數字。您的格式說明符會爲任何絕對編號> = 1E5生成隨機數字。你的方法有很大的缺陷,可能是因爲你需要__float128來解決問題。 – 2012-01-28 14:02:49
在__float128中無法準確表示的無限數十進制數的事實是不相關的,點2只要求十進制表示形式足夠精確,以便在回讀和舍入時與進入的內容相同。意識到格式說明符不正確,問題要求正確。我的「方法」很好,你不知道我想要解決什麼問題。 「 – 2012-01-28 15:27:45