📜  C++中的sqrt,sqrtl和sqrtf

📅  最后修改于: 2021-05-30 10:52:22             🧑  作者: Mango

cmath标头定义了另外两个内置函数,用于计算数字的平方根(除sqrt外,该参数以double作为参数),该数字具有float和long double类型的参数。

  1. double sqrt(double arg) :返回数字的平方根以键入double
    Syntax : double sqrt(double arg)
    
    // CPP code to illustrate
    // the use of sqrt function.
    #include 
    #include 
    #include 
      
    using namespace std;
      
    int main()
    {
        double val1 = 225.0;
        double val2 = 300.0;
      
        cout << fixed << setprecision(12) << sqrt(val1) << endl;
        cout << fixed << setprecision(12) << sqrt(val2) << endl;
      
        return (0);
    }
    
    输出:
    15.000000000000
    17.320508075689
    

    与该函数相关的错误和异常:
    (感谢sunny6041贡献了本节)

    1. 必须同时提供两个参数,否则像这样调用’sqrt()’时将没有错误提供匹配函数。
      #include 
      #include 
      using namespace std;
        
      int main()
      {
          double answer;
                
          answer = sqrt();
          cout << "Square root of " << a 
               << " is " << answer << endl;
        
          return 0;
      }
      

      输出:

      prog.cpp:9:16: error: no matching function for call to 'sqrt()'
      
    2. 如果我们在参数域中传递负值,则会发生错误。输出将是-a的平方根是-nan。
      #include 
      #include 
      using namespace std;
        
      int main()
      {
          double a = -2 ,  answer;
                
          answer = sqrt(a);
          cout << "Square root of " << a 
               << " is " << answer << endl;
        
          return 0;
      }
      

      输出:

      Square root of -2 is -nan
      
      
  2. float sqrtf(float arg) :返回数字的平方根以键入float
    Syntax : float sqrtf(float arg)
    
    // CPP code to illustrate
    // the use of sqrtf function.
    #include 
    #include 
    #include 
      
    using namespace std;
      
    int main()
    {
        float val1 = 225.0;
        float val2 = 300.0;
      
        cout << fixed << setprecision(12) << sqrtf(val1) << endl;
        cout << fixed << setprecision(12) << sqrtf(val2) << endl;
      
        return (0);
    }
    
    输出:
    15.000000000000
    17.320508956909
    
  3. long double sqrtl(long double arg) :它返回数字的平方根以更精确地键入long double。使用此函数的优势在于,当使用10 18阶整数时,由于精度错误,使用sqrt函数计算其平方根可能会给出错误的答案,因为编程语言中的默认函数可以使用浮点数/双精度数。但这总是会给出准确的答案。
    Syntax : long double sqrtl(long double arg)
    

    下图显示了使用sqrt和sqrtl的长整数时的确切区别。
    使用sqrt函数。

    // CPP code to illustrate
    // the incorrectness of sqrt function.
    #include 
    #include 
    #include 
      
    using namespace std;
      
    int main()
    {
        long long int val1 = 1000000000000000000;
        long long int val2 = 999999999999999999;
      
        cout << fixed << setprecision(12) << sqrt(val1) << endl;
        cout << fixed << setprecision(12) << sqrt(val2) << endl;
      
        return (0);
    }
    
    输出:
    1000000000.000000000000
    1000000000.000000000000
    

    输出:

    1000000000.000000000000
    1000000000.000000000000
    

    使用sqrtl函数

    // CPP code to illustrate
    // the correctness of sqrtl function.
    #include 
    #include 
    #include 
      
    using namespace std;
      
    int main()
    {
        long long int val1 = 1000000000000000000;
        long long int val2 = 999999999999999999;
      
        cout << fixed << setprecision(12) << sqrtl(val1) << endl;
        cout << fixed << setprecision(12) << sqrtl(val2) << endl;
      
        return (0);
    }
    
    输出:
    1000000000.000000000000
    999999999.999999999476
    
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”