2016-10-15 94 views
0

我解决的问题访问http://www.spoj.com/problems/CHI_ROOT/最大数量

(找到许多n次方根和打印结果 的第一101个显著数字没有小数点,拖尾和引导零)使用long double

sizeof(long double)=12; 

因此总量不分配用于long double可变位的是96位(12×8)。

变量可存储的最大值约为10^28。

我想知道变量在小数点后可以存储多少个最大位数 以及它如何存储?

+2

大多数系统中的浮点数由[IEEE浮点格式](https://en.wikipedia.org/wiki/IEEE_floating_point)表示。 –

+0

80位,而不是96,64位存储尾数。因此它可以表示pow(2,64)= 1.8E19不同的值。所以不要超过19位重要的十进制数字。在对数值进行任何数学运算时,您会很快失去一个数值,只需将数值从十进制转换为二进制数,例如乘以并转换回小数就足够了,因为该值需要四舍五入。所以用18作为实用价值。 –

回答

1

您可以查询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个根到任意精度。