我曾经认为float可以在逗号之后使用最大6位数和double 15。但是如果我打印限制这里
typedef std::numeric_limits<float> fl;
typedef std::numeric_limits<double> dbl;
int main()
{
std::cout << fl::max_digits10 << std::endl;
std::cout << dbl::max_digits10 << std::endl;
}它打印float 9和double 17?
发布于 2017-11-04 11:08:53
来自优先选择
与大多数数学运算不同的是,--只要至少使用max_digits10 (浮点数为9,双值为17 ),浮点值到文本和回文本的转换是准确的:即使中间文本表示不精确,也保证产生相同的浮点值。在十进制表示法中,它可能需要超过100个小数来表示浮点数的精确值。
例如(我正在使用http://www.exploringbinary.com/floating-point-converter/以方便转换)和双重精度格式:
1.1e308 109999999999999997216016380169010472601796114571365898835589230322558260940308155816455878138416026219051443651421887588487855623732463609216261733330773329156055234383563489264255892767376061912596780024055526930962873899746391708729279405123637426157351830292874541601579169431016577315555383826285225574400 =>
使用16位有效数字:
1.09999999999999999e308 109999999999999897424000903433019889783160462729437595463026208549681185812946033955861284690212736971153169019636833121365513414107701410594362313651090292197465320141992473263972245213092236035710707805906167798295036672550192042188756649080117981714588407890666666245533825643214495197630622309084729180160 =>
使用17位有效数字:
1.099999999999999999e308 109999999999999997216016380169010472601796114571365898835589230322558260940308155816455878138416026219051443651421887588487855623732463609216261733330773329156055234383563489264255892767376061912596780024055526930962873899746391708729279405123637426157351830292874541601579169431016577315555383826285225574400 =>
与原版相同
超过17位重要数字:
1.099999999999999995555e308 109999999999999997216016380169010472601796114571365898835589230322558260940308155816455878138416026219051443651421887588487855623732463609216261733330773329156055234383563489264255892767376061912596780024055526930962873899746391708729279405123637426157351830292874541601579169431016577315555383826285225574400 =>
继续和原来一样。
发布于 2017-11-04 11:03:54
你把digits10和max_digits10搞混了。
如果digits10为6,那么任何有6个小数位数的数字都可以转换为浮点数类型,然后返回,当四舍五入为六位小数时,生成原始值。
如果max_digits10为9,那么至少有两个浮点数字在转换为十进制时产生相同的初始小数位数。
根据你的描述,digits10是你要找的号码。这是关于从小数点到二进制浮点数的转换。
max_digits10是一个关于将二进制浮点数转换回十进制浮点数的数字。
https://stackoverflow.com/questions/47109849
复制相似问题