Programación General > C/C++

 Funcion de error, erf(X)

(1/1)

Lomko:
Hola a todos,

soy un novato en la programación y es que no se como arreglar el problema que tengo.
Estoy programando en Visual Studio 2008 en c++. Quiero utilizar la función de error, erf(x) o erfc(x). He visto por la red que añadiendo el encabezado math.h (he probado poner #include "math.h" y #include <math.h>) el problema estaría solucionado ya que estaría ahí incluido. Me pasó lo mismo con anterioridad para el exponencial, exp(x), y el logaritmo, log(x). Pero resulta que ahora al utilizar erf(x) no funciona (y con el logaritmo y exponencial no tuve ningún problema). Al compilar me da el error C3861 y me dice que no se ha encontrado el identificador. ¿Puede alguien ayudarme en saber qué pasa y comó arreglarlo? #include "stdafx.h" también está incluido en el código.

gracias y un saludo

Amilius:
Visual Studio (incluyendo VS 2010) no soporta esas funciones. Como son parte del estándar C99 la palabra oficial de MS es que VS es un compilador de C++, no de C.  :bad:

En esta página puedes encontrar una implementación de erf() para C++:  http://www.johndcook.com/cpp_erf.html

Lo copio abajo, por si desaparece dicha página:

--- Código: C++ --- #include <cmath>#include <cstdio> double erf(double x){    // constants    double a1 =  0.254829592;    double a2 = -0.284496736;    double a3 =  1.421413741;    double a4 = -1.453152027;    double a5 =  1.061405429;    double p  =  0.3275911;     // Save the sign of x    int sign = 1;    if (x < 0)        sign = -1;    x = fabs(x);     // A&S formula 7.1.26    double t = 1.0/(1.0 + p*x);    double y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x);     return sign*y;} void main(){    // Select a few input values    double x[] =     {        -3,         -1,         0.0,         0.5,         2.1     };     // Output computed by Mathematica    // y = Erf[x]    double y[] =     {         -0.999977909503,         -0.842700792950,         0.0,         0.520499877813,         0.997020533344     };     int numTests = sizeof(x)/sizeof(double);     double maxError = 0.0;    for (int i = 0; i < numTests; ++i)    {        double error = fabs(y[i] - erf(x[i]));        if (error > maxError)            maxError = error;    }     printf("Maximum error: %fn", maxError);}      

Lomko:
Gracias Amilius, pero como ya dije, soy un novato muy novato.

Lo que entiendo de este código es que al principio define la función de error. Luego con el "void main" empieza lo que sería un programilla en el que introduce un array de valores para que le resuelva en otro array de respuestas, no? Pero como tendría que hacer para darle yo x=2 y que me saque a ser posible en la ventanita negra (de MSdos?¿?) su valor de la función de error? He estado jugando un poco y sí, añadiendo al final getchar(); me saca el error del cálculo (o eso entiendo que hace). Pero yo quiero el valor de la función de error, asike tras jugar, no he llegado a nada sustancial. Agradecería toda ayuda en este sentido, gracias.

Un saludo

Amilius:
Bueno eso es bastante básico, en lugar del anterior main, tendrías que usar uno como este:


--- Código: C++ --- void main(){    double x = 2.0;    printf("erf(%f) = %fn", x, erf(x));}  
Sería mejor si buscas un tutorial para que vayas aprendiendo a usar estos aspectos básicos paso a paso.

Navegación

[0] Índice de Mensajes

Ir a la versión completa