gpt4 book ai didi

c - __float128 不丢失信息所需的 printf 精度是多少?

转载 作者:太空狗 更新时间:2023-10-29 17:26:14 24 4
gpt4 key购买 nike

我正在尝试使用 libquadmath 打印 __float128,例如:

quadmath_snprintf(s, sizeof(s), "%.30Qg", f);

具有以下三个约束:

  1. 输出必须匹配以下产生式:

     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
  2. 给定任何输入 __float128 "i",该输入已被打印为与上述产生式 "s"匹配的字符串,然后 "s"被扫描回 __float128 "j"- "i"必须按位相同到“j” - 即不应丢失任何信息。至少对于某些值,这是不可能的(NaN、Infinity),这些值的完整列表是什么?

  3. 应该没有其他字符串满足上述两个条件,即比候选短。

是否有满足上述条件的 quadmath_snprintf 格式字符串(可能时为 1、3 和 2)?如果有,那是什么?

无法通过上述产生式足够准确地满足第 2 点的 __float128 值是多少? (例如 Nan、+/-Infinity 等)如何检测 __float128 是否持有这些值之一?

最佳答案

如果您使用的是 x86,则 GCC __float128 类型是 IEEE 754-2008 binary128 格式的软件实现。如果字符表示包含 36 个有效(十进制)数字,IEEE 754 标准要求二进制 -> 字符 -> 二进制往返恢复原始值。因此格式字符串 %.36Qg 应该这样做。

不需要 NaN 往返恢复原始按位值。

至于您的要求 #3,libquadmath 不包含这种“最短表示”格式的代码,例如本着 Steele & White 白皮书或 David Gay 的代码的精神。

关于c - __float128 不丢失信息所需的 printf 精度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9045243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com