或者换句话说,intmax_t
和%jd
是否等价,但对于浮点数?
这已经被问到一个副问题here,但问题是如此之大,以至于我认为人们忘了回答这个问题。也被标记为c ++,我正在寻找一个解决方案。
相关问题:
答案 0 :(得分:4)
据我所知,C没有扩展浮点类型。唯一的浮点类型是float
,double
和long double
。因此,%La
,%Le
,%Lf
,%Lg
和long 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:float
,double
和long double
。如果你想创建一个向前兼容的路径,你可以用typedef long double Xdouble
来准备变更,但是你可能不得不编写很多包装函数,如Xdouble sinX(Xdouble x);
,为{{准备许多等价的定义1}},DBL_MANT_DIG
等。不费吹灰之力。