Miércoles 20 de Noviembre de 2024, 08:41
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Funcion de error, erf(X)
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Funcion de error, erf(X) (Leído 2097 veces)
Lomko
Nuevo Miembro
Mensajes: 2
Funcion de error, erf(X)
«
en:
Jueves 29 de Julio de 2010, 09:02 »
0
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
Tweet
Amilius
Miembro HIPER activo
Mensajes: 665
Re: Funcion de error, erf(X)
«
Respuesta #1 en:
Viernes 30 de Julio de 2010, 01:30 »
0
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.
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
Nuevo Miembro
Mensajes: 2
Re: Funcion de error, erf(X)
«
Respuesta #2 en:
Lunes 2 de Agosto de 2010, 11:57 »
0
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
Miembro HIPER activo
Mensajes: 665
Re: Funcion de error, erf(X)
«
Respuesta #3 en:
Lunes 2 de Agosto de 2010, 22:10 »
0
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.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Funcion de error, erf(X)