我发现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
您需要了解有效位数。双精度型可以容纳非常大的值,但它只能处理这么多的数字。搜索
C++ doubles significant digits
并阅读 400 个相关网页中的任意一个。
如果您需要更多的数字,则需要使用 double 以外的数字。如果您知道它是整数而不是浮点数,则可以使用
long long int
,它至少有 8 个字节并且可以容纳 2^63-1
。如果您知道它是正数,则可以将其设为 unsigned long long int
,并且您将获得 0 到至少 18,446,744,073,709,551,615 (2^64-1
) 的范围。
如果你需要更多的数字,你需要找到一个支持任意长整数的库。谷歌搜索
c++ arbitrary precision integer
会给你一些指导。