c++ 关于标准::数值限值< double>::数字10的误解[重复]

yyhrrdl8  于 2023-01-28  发布在  其他
关注(0)|答案(3)|浏览(153)
    • 此问题在此处已有答案**:

What is the meaning of numeric_limits::digits10(5个答案)
5天前关闭。
根据我的理解(关于我在互联网上看到的),std::numeric_limits<double>::digits10(对于double,它等于15)似乎表示double可以处理的位数,例如1.23456789012345,而不是1.234567890123456
另一方面,双精度浮点格式的范围将一直到1.8*10^+308,它似乎表示一个不只15位的数字。
不连贯在哪里?

b1payxdu

b1payxdu1#

... std::numeric_limits<double>::digits10(对于double等于15)表示双精度型可以处理的位数...
更准确地说,它是without loss of precision可以存储的有效位数。
Python中的示例:

1e15 == 1e15 + 1
False 

1e16 == 1e16 + 1
True # loss of precision
eqqqjvef

eqqqjvef2#

std::numeric_limits::digits10:可以不加改变地表示的位数(十进制)。

fjaof16o

fjaof16o3#

一个是 * 有效 * 位数,另一个是可表示的数字的 * 范围 *,因此,你可以有:

1.23456789012345*10^308

但不是

1.234567890123456*10^308

其示出了可以表示的 * 有效 * 位15和 * 范围 * 10^308

相关问题