首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不应该浮动6和双15的可用数字吗?

不应该浮动6和双15的可用数字吗?
EN

Stack Overflow用户
提问于 2017-11-04 10:43:09
回答 3查看 177关注 0票数 1

我曾经认为float可以在逗号之后使用最大6位数和double 15。但是如果我打印限制这里

代码语言:javascript
复制
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?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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 =>

继续和原来一样。

票数 2
EN

Stack Overflow用户

发布于 2017-11-04 11:03:54

你把digits10max_digits10搞混了。

如果digits10为6,那么任何有6个小数位数的数字都可以转换为浮点数类型,然后返回,当四舍五入为六位小数时,生成原始值。

如果max_digits10为9,那么至少有两个浮点数字在转换为十进制时产生相同的初始小数位数。

根据你的描述,digits10是你要找的号码。这是关于从小数点到二进制浮点数的转换。

max_digits10是一个关于将二进制浮点数转换回十进制浮点数的数字。

票数 3
EN

Stack Overflow用户

发布于 2017-11-04 12:41:18

十进制数字和二进制数字之间没有精确的对应关系。

IEEE754单精度的隐式前导采用23位加1位,双精度采用52+1位。

若要获得等效的十进制精度,请使用

log10(2^binary_digits) = binary_digits*log10(2)

对于单个精度,这是

24*log10 10(2)= 7.22

和双精度

53*log10 10(2)= 15.95

请参阅这里维基百科页面,我不认为这是特别简洁的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47109849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档