如何获得最大的精度浮点数据类型的实现及其printf说明符?

或者换句话说, intmax_t%jd是否等价,但对于浮点数?

这已经被问到了这里的一个侧面问题,但问题是如此之大,以至于我认为人们忘了回答这个问题。 也被标记为c ++,我正在寻找交流解决方案。

相关问题:

  • C99中是否有固定尺寸的浮动和双重类型?

C11没有与intmax_t等效的浮点(具有支持的最大宽度的整数类型)。 如果未来的C应该定义某种长长的双倍,等等,语言目前没有无缝的升级路径。

C11 6.11.1.1“未来的标准化可能包括其他浮点类型,包括具有更大范围,精度或两者的长浮点类型。” 确实指出了你想象的更大宽度的可能性。

浮点数的情况不同于有需要的整数。 多年来,各种处理器的宽度整数宽度越来越大(8,16,32,64)和128。 虽然总浮点大小 相对更稳定(4,8,10,16),但精度,范围,编码,舍入已经占用了很多FP。 我怀疑接下来我们会看到十进制和二进制浮点规范。

另一个区别是整数在一个维度上增长 – 范围。 FP可以在范围和精度上独立增长,更不用说基础的特性(2,10,16等)。另请参阅下面的“IEEE 754”评论。

目前我们有3:C11 6.2.5.4:float,double和long double 。 如果你想创建一个向前兼容的路径你可以用typedef long double Xdouble来准备改变,但是你可能不得不编写很多包装函数,比如Xdouble sinX(Xdouble x); ,为DBL_MANT_DIGPRIdN等准备许多等价的定义。不小的努力。

据我所知,C没有扩展浮点类型。 唯一的浮点类型是floatdoublelong double 。 因此, %La%Le%Lf%Lglong double似乎是您的答案。

某些实现可能会提供其他扩展类型,但它们完全超出了标准的范围。