C++ 问题中的 sqrt 函数

sqrt function in C++ issue

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    
    int n;
    cin >> n;
    
    int i = sqrt(1 + 2 * n * (n + 1)) - 1;
    
    cout << i;
}

我写了一个简单的程序,它利用了 C++ 中的 sqrt() 函数。上面的程序在控制台上为 n = 32768 打印出一个负值,即使 sqrt() 的输入是正数。我尝试将语句从 int i = sqrt(1 + 2 * n * (n + 1)) - 1; 更改为
double i = sqrt(1 + 2 * n * (n + 1)) - 1; 但错误未解决。

输出:

32768
-2147483648

以上输出是 int i = sqrt(1 + 2 * n * (n + 1)) - 1;

请帮忙!

int n 更改为 double n。您的计算 1 + 2 * n * (n + 1) 溢出了 int 的范围,对于 32 位,范围是 -2,147,483,648 到 2,147,483,647。

旁注:int可能不是 32 位,这取决于平台(但是,通常大多数情况下是 32 位)