2016-10-15 140 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個根到任意精度。