我發現 std::cin 的一個奇怪行為(在 Win 10 下使用 VS 17):當輸入一個大數字時,std::cin 正在讀取的數字接近但不同。有沒有對大數進行任何近似?如何獲得與輸入完全相同的大數字?
double n(0);
cout << "Enter a number > 0 (0 to exit): ";
cin.clear(); // does not help !
cin >> n; // enter 2361235441021745907775
printf("Selected number %.0f \n", n); // 2361235441021746151424 is processed ?.
輸出
Enter a number > 0 (0 to exit):
2361235441021745907775
Selected number 2361235441021746151424
uj5u.com熱心網友回復:
您需要了解有效位數。double 可以保存非常大的值,但它只能處理這么多的數字。搜索C doubles significant digits
并閱讀 400 個談論它的網頁中的任何一個。
如果你需要更多的數字,你需要使用雙精度以外的東西。如果您知道它是整數,而不是浮點數,則可以使用long long int
至少 8 個位元組并且可以容納2^63-1
. 如果你知道它是一個正數,你可以得到它unsigned long long int
,你得到的范圍是 0 到至少 18,446,744,073,709,551,615 ( 2^64-1
)。
如果你需要更多的數字,你需要找到一個支持任意長整數的庫。google forc arbitrary precision integer
會給你一些指導。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/444261.html