C++ 双精度的有效小数位数?

C++ 双精度的有效小数位数?,c++,c,floating-point,language-lawyer,C++,C,Floating Point,Language Lawyer,C/C++标准如何保证双精度的最小有效十进制数字 C++标准实际上在附注18.3.2.4/10的脚注中表示,这相当于在C标准中定义的 dBLyDigy < /代码>。但是我在C标准中找不到关于最小值的任何东西 那么,下列其中一项的最小值是多少 std::numeric\u limits::digits10 DBL\u-MANT\u-DIGedit:No,DBL\u-DIG 在C++标准中找不到它,因为C++在这个标准上遵从C标准。对于十进制数字,最小值为: FLT_DIG 6 DBL_

C/C++标准如何保证双精度
的最小有效十进制数字

C++标准实际上在附注18.3.2.4/10的脚注中表示,这相当于在C标准中定义的<代码> dBLyDigy < /代码>。但是我在C标准中找不到关于最小值的任何东西

那么,下列其中一项的最小值是多少

  • std::numeric\u limits::digits10
  • DBL\u-MANT\u-DIG
    edit:No,
    DBL\u-DIG

在C++标准中找不到它,因为C++在这个标准上遵从C标准。对于十进制数字,最小值为:

FLT_DIG   6
DBL_DIG  10
LDBL_DIG 10
因此,
浮点
为6位,而
双精度
长双精度
为10位。(这是保证从文本到类型再到类型的转换将产生相同值的位数。)


请注意,
DBL\u MANT\u DIG
对应于基数中的位数,因此通常是二进制位数,而不是十进制位数。

有趣的是,我之前阅读类似问题时也在想同样的问题,在标准中找不到任何内容。据我所知,只能保证这三种浮点类型具有嵌套范围。您需要的部分是C标准中的§5.2.4.2.2。这是一个相当有趣的部分,从内容上看,但你必须等待比我更懒惰的人来提取任何有意义的内容。:)似乎有一点给出了最低要求,但我只是浏览了一下。只是在第5.2.4.2.2节第10段中检查了“以下列表中给出的值应替换为常量表达式,其实现定义的值的大小应大于或等于(绝对值)对于显示的那些,使用相同的符号:“-但随后也不显示
DBL_MANT_DIG
的任何值。根据定义:DBL_MANT_DIG指定双精度尾数部分的基本FLT_基数位数。@FrerichRaabe指定
DBL_MANT_DIG
的最小值没有意义,因为正如byteherder所说,这取决于
FLT\u RADIX
DBL\u DIG
DBL\u MANT\u DIG
不同,这是OP要求的?@FrerichRaabe我后来注意到了。然而,他首先要求的是
std::numeric\u limits::digits10
,它对应于
DBL\u DIG
。本标准对
DBL\u MANT\u DIG
无任何要求,因为该值的重要性取决于
FLT\u基数
。IBM
float
(具有
FLT\u基数==16
)将只有6,而作为IEEE
float
将有24,尽管它们在精度上并没有根本性的不同。我犯了一个错误,
DBL\u DIG
是我搜索的定义。请参阅中的§5.2.4.2.2standard@helami这就是我所怀疑的,鉴于您在
数值限制
中引用了
数字10