假設有兩個數字22和7我想打印到第100位小數的答案,應該像3.1428571428571428571428571的....而試圖用如何精確打印浮點數或雙精度型變量的小數位數至100位?
cout << setprecision(100) << fixed << (22.0/7.0);
我得到這樣的事情3.142857142857142793701541449991054832935333251953125。 ......
假設有兩個數字22和7我想打印到第100位小數的答案,應該像3.1428571428571428571428571的....而試圖用如何精確打印浮點數或雙精度型變量的小數位數至100位?
cout << setprecision(100) << fixed << (22.0/7.0);
我得到這樣的事情3.142857142857142793701541449991054832935333251953125。 ......
當我嘗試
int main()
{
const long double pi = 22.0/7.0;
std::cout << std::setprecision(std::numeric_limits<long double>::max()) << pi << '\n';
}
我越來越細分泄漏。
你得到的max是:
int main()
{
const long double pi = 22.0/7.0;
std::cout << std::setprecision(std::numeric_limits<long double>::digits) << pi << '\n';
}
輸出是: 3.142857142857142793701541449991054832935333251953125
你對第一個例子有什麼期待? 'std :: numeric_limits
但我基本上有另一個問題。我提出質疑意見。我也會把它放在這裏。 \t 我得到SEG違規。我的問題是我們可以怎樣把整個內容放在一個流中? - – Naidu
'digits10'也是錯誤的,它是可以不加改變地表示的基數爲10的數字。它低於存儲值的準確度。由於C++ 11有'max_digits10',它會給你唯一存儲任何類型值所需的有效位數。當然,指數需要另外保存,即通過科學記數法。 – user4407569
通常在C++中,雙(兩者的更大的)存儲在8個字節。 這意味着該數字可以包含2^8 * 8 = 2^64 byes(^ = power)。 這意味着在保持符號和浮點位置之後,該點之後的最大數字位數將最多爲〜15位數。因此您將不得不創建其他方法,然後再爲此計算加倍。 這裏是我的參考: https://www.tutorialspoint.com/cplusplus/cpp_data_types.htm
打印不是問題。代碼很好地打印作爲雙重。
cout << setprecision(100) << fixed << (22.0/7.0);
OP's reported result
3.142857142857142793701541449991054832935333251953125.......
// My expected result of the double 22.0/7.0
3.1428571428571427937015414499910548329353332519531250000000....
使用double
數學,一般情況下不會提供100位精度OP。這是爲什麼。
不同的解釋方法
double
一個通常是64位。那最多可以給出2 的組合,完全可以代表的數字。考慮double n,d,q;
並劃分n/d
。即2 n,d
的不同組合我們正試圖將所有這些結果放入q
。很多人會得出相同的答案(22.0/11.0和14.0/7.0都是2.0)。然而,肯定會有超過2個不同的數學答案。
所以C 輪的答案,最好的 - 通常是最接近 - 表示的double
。
在這種情況下:22.0/7.0,確切地說,在這兩個組合中沒有一個是。
「最佳」是「像3.142857 142857 142793 7015414 ......」
double x = 22.0/7.0;
// x 3.142857 142857 142793 701...
// 22.0/7.0
// math 3.142857 142857 142857 142857
double next_x = nextafter(22.0/7.0, 4.0);
// 3.142857 142857 143237 790...
既不'float'也不'double'有許多顯著的數字時,當轉換成十進制格式。 [具體來說,'float'具有大約7位精度的小數位數,'double'具有16位數](https:// en。wikipedia.org/wiki/Floating_point#Internal_representation) – jaggedSpire
你可能想嘗試像gmp這樣的庫。 –
不要混淆精度(你可以顯示多少個小數位)和準確性(有多少個小數位是正確的)。一旦你超過了第十五個重要數字,你可能會隨機附加數字。 –