C++ 双精度的有效小数位数?
C/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++标准实际上在附注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基数
。IBMfloat
(具有FLT\u基数==16
)将只有6,而作为IEEEfloat
将有24,尽管它们在精度上并没有根本性的不同。我犯了一个错误,DBL\u DIG
是我搜索的定义。请参阅中的§5.2.4.2.2standard@helami这就是我所怀疑的,鉴于您在数值限制
中引用了数字10
。