您可以查询the numeric_limits
class template或<cfloat>
macros点,可以准确后得到的显著小数位数显示:
#include <limits>
#include <iostream>
int main() {
std::cout << std::numeric_limits<float>::digits10 << std::endl;
std::cout << FLOAT_DIG << std::endl;
// 6
std::cout << std::numeric_limits<double>::digits10 << std::endl;
std::cout << DBL_DIG << std::endl;
// 15
std::cout << std::numeric_limits<long double>::digits10 << std::endl;
std::cout << LDBL_DIG << std::endl;
// 18
}
在x86,一个long double
通常专卖店为extended precision格式(其中只有80位,而不是96位;由于对齐,sizeof被填充到12个字节)。
请注意,数字的数量远远小于101.你应该找出一个算法来计算第n个根到任意精度。
大多数系统中的浮点数由[IEEE浮点格式](https://en.wikipedia.org/wiki/IEEE_floating_point)表示。 –
80位,而不是96,64位存储尾数。因此它可以表示pow(2,64)= 1.8E19不同的值。所以不要超过19位重要的十进制数字。在对数值进行任何数学运算时,您会很快失去一个数值,只需将数值从十进制转换为二进制数,例如乘以并转换回小数就足够了,因为该值需要四舍五入。所以用18作为实用价值。 –