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 位)
#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 位)