intmax_t
或者换一种说法,%jd
浮点数是否有等价物?
此处已将其作为附带问题提出,但问题太大了,我认为人们忘记回答附带问题。这也被标记为 c++,我正在寻找交流解决方案。
相关问题:
据我所知,C 没有扩展的浮点类型。唯一的浮点类型是float
、double
和long double
。因此,%La
、%Le
、%Lf
、%Lg
和long double
似乎是您的答案。
一些实现可能会提供额外的扩展类型,但它们完全超出了标准的范围。
C11 没有与 intmax_t 等效的浮点(支持最大宽度的整数类型。)。未来的 C 是否应该定义某种 long long double 等。该语言目前没有无缝升级路径。
C11 6.11.1.1 “未来的标准化可能包括额外的浮点类型,包括范围、精度或两者都比 long double 更大的浮点类型。” 确实指出了您设想的更大宽度的可能性。
浮点数的情况与需要的整数不同。多年来,各种处理器的整数宽度越来越宽(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
. 如果您想创建一个向前兼容的路径,您可以准备使用 say 进行更改typedef long double Xdouble
,但是您可能不得不编写许多包装函数,例如Xdouble sinX(Xdouble x);
,准备许多等效的定义DBL_MANT_DIG
,PRIdN
等等。不小的努力。