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

时间:2013-06-19 10:57:46

标签: c floating-point

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

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

相关问题:

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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:floatdoublelong double。如果你想创建一个向前兼容的路径,你可以用typedef long double Xdouble来准备变更,但是你可能不得不编写很多包装函数,如Xdouble sinX(Xdouble x);,为{{准备许多等价的定义1}},DBL_MANT_DIG等。不费吹灰之力。