【问题标题】:sqrt function in C++ issueC++ 问题中的 sqrt 函数
【发布时间】:2020-09-09 01:47:12
【问题描述】:
#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() 函数的简单程序。即使sqrt() 的输入是正数,上面的程序也会在控制台上打印出 n = 32768 的负值。我尝试将语句从 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;

请帮忙!

【问题讨论】:

  • 尝试将n更改为double
  • 1 + 2 * n * (n + 1)int 类型的表达式。好像溢出了。
  • 如果调用 sqrt(或任何其他函数)的结果没有意义,请查看调用它的参数。
  • 尝试手动计算1 + 2 * 32768 * (32768 + 1),您会很快注意到它是2147549185,并且可能溢出int

标签: c++ sqrt


【解决方案1】:

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

旁注:int 可能不是 32 位的,这取决于平台(但是,通常大部分时间是 32 位)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2014-04-11
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多