首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要使__float128不丢失信息,需要多少打印精度?

要使__float128不丢失信息,需要多少打印精度?
EN

Stack Overflow用户
提问于 2012-01-28 12:31:04
回答 2查看 4.7K关注 0票数 6

我正在尝试使用lib44数学打印一个__float128,例如:

代码语言:javascript
复制
quadmath_snprintf(s, sizeof(s), "%.30Qg", f);

有以下三项条件:

  1. 输出必须与以下产品匹配:

数字=减去整数,小数点= %x2E;数字1-9 = %x31-39;1-9 e= %x65 / %x45;e exp =e-/+1*数字框架=小数点1*位int =0/(数字化1-9*数字)减= %x2D;- plus = %x2B;+零= %x30;0

  • 给定已打印到与上述产品"s“匹配的字符串的任何输入__float128 "i”,然后"s“被扫描回__float128 "j”- "i“必须按位与"j”相同--即不应丢失任何信息。至少对于某些值来说,这是不可能的(NaN,Infinity),这些值的完整列表是什么?

  • 不应该有满足上述两个条件的其他字符串,即比候选字符串短。

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

__float128的值有哪些不能被精确地表示,以满足上述产品的第2点?(例如Nan,+/-Infinity等)如何检测__float128是否持有这些值之一?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-28 21:47:11

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

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

至于您的需求#3,lib44不包含这种“最短表示”格式的代码,例如,基于Steele &白皮书的精神或David的代码。

票数 2
EN

Stack Overflow用户

发布于 2012-01-28 19:25:18

我的直觉告诉我,二进制分数0.1111.1(128个1);也等于1-1/2**128在转换为十进制时会产生最大的溢出数。将这个值转换为十进制(我现在没有一个bignum包),数数数字的数目,在上面加上2-3,你应该是安全的。不过,我没有数学证据证明这就足够了。

如果I/O的精度很重要,我更愿意将浮点数作为十六进制字符串输出。准确的浮点IO是很难得到正确的,在这方面,图书馆可能是错误的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9045243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档