sqrt, sqrtl y sqrtf en C++

Hay varias funciones disponibles en la biblioteca de C++ para calcular la raíz cuadrada de un número . Más prominentemente, se usa sqrt . Se necesita el doble como argumento. El encabezado <cmath> define dos funciones incorporadas más para calcular la raíz cuadrada de un número (aparte de sqrt) que tiene un argumento de tipo float y long double . Por lo tanto, todas las funciones utilizadas para calcular la raíz cuadrada en C++ son:

Función

Tipo de datos

sqrt

doble

cuadrado

flotar

sqrtl

largo doble

Las funciones se han discutido en detalle a continuación:

A) double sqrt(double arg) : Devuelve la raíz cuadrada de un número para escribir double. 

Sintaxis:

double sqrt(double arg)

CPP

// CPP code to illustrate the use of sqrt function
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
// Driver Code
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);
}
Producción

15.000000000000
17.320508075689

Complejidad temporal: O(√n)
Espacio auxiliar: O(1)

Errores y excepciones asociados con esta función: 

1. Es obligatorio dar el argumento de lo contrario, dará un error sin función coincidente para la llamada a ‘sqrt()’ como se muestra a continuación, 

CPP

// CPP Program to demonstrate errors in double sqrt()
#include <cmath>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    double answer;
 
    answer = sqrt();
    cout << "Square root of " << a << " is " << answer
         << endl;
 
    return 0;
}

Producción

prog.cpp:9:19: error: no matching function for call to ‘sqrt()’
     answer = sqrt();

Complejidad temporal: O(√n)
Espacio auxiliar: O(1)

2. Si pasamos un valor negativo en el dominio del argumento, se produce un error y la salida será la raíz cuadrada de -a, que es -nan.

CPP

// CPP Program to demonstrate errors in double sqrt()
#include <cmath>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    double a = -2, answer;
 
    answer = sqrt(a);
    cout << "Square root of " << a << " is " << answer
         << endl;
 
    return 0;
}

Producción:

Square root of -2 is -nan

Complejidad de Tiempo: O(√n)
Espacio Auxiliar: O(1)
B) float sqrtf(float arg) : Devuelve la raíz cuadrada de un número a tipo float.

Sintaxis:

float sqrtf(float arg)

CPP

// CPP code to illustrate the use of sqrtf function
#include <cmath>
#include <iomanip>
#include <iostream>
 
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);
}
Producción

15.000000000000
17.320508956909

Complejidad de Tiempo: O(√n)
Espacio Auxiliar: O(1)
C) long double sqrtl(long double arg) : Devuelve la raíz cuadrada de un número para escribir long double con más precisión. 

Ventaja de la función sqrtl: cuando se trabaja con números enteros del orden de 10 18 , calcular su raíz cuadrada con la función sqrt puede dar una respuesta incorrecta debido a errores de precisión, ya que las funciones predeterminadas en el lenguaje de programación funcionan con flotantes/dobles. Pero esto siempre dará una respuesta precisa. 
Sintaxis:

long double sqrtl(long double arg)

A continuación se muestra una ilustración que muestra la diferencia exacta cuando se trabaja con números enteros largos con sqrt y sqrtl,
1) Usando la función sqrt:

CPP

// CPP code to illustrate the incorrectness of sqrt
// function
#include <cmath>
#include <iomanip>
#include <iostream>
 
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);
}
Producción

1000000000.000000000000
1000000000.000000000000

Complejidad temporal: O(√n)
Espacio auxiliar: O(1)

2) Usando la función sqrtl:

CPP

// CPP code to illustrate the correctness of sqrtl function
#include <cmath>
#include <iomanip>
#include <iostream>
 
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);
}
Producción

1000000000.000000000000
999999999.999999999476

Complejidad temporal: O(√n)
Espacio auxiliar: O(1)

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por Nishant Tanwar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *