es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué está mal con f(random(..), random(..)) en C?

Me encontré con un problema que realmente me confundió. Estaba tratando de calcular los valores de f(x, y) = (y^3)/(x^2+y^2) en algunos puntos aleatorios en -1<x<1 y=""></x<1><y<1. aquí=”” está=”” mi=”” código:=””></y<1.><stdio.h>
#include<stdlib.h>
#include<math.h>

#define f(x, y) ( pow((y),3) / (pow((x),2) + pow((y),2)) )

double random(double min, double max)
{
double m;
m = rand()/(double)RAND_MAX;
return (min + m * (max – min));
}

void main()
{
int i;
double v;

for(i = 0; i < 500; i++)
{
    v = f(random(-1,1), random(-1,1));
    printf("%lf\n", s);
}

}

Y luego obtuve algunos valores muy extraños que son mayores que 1 o menores que -1 (que son el máximo y el mínimo que f puede obtener en -1<x<1 y=""></x<1><y<1).

por otro lado, cuando cambié mi código usando 2 variables que llevan valores x e y aleatorios y luego los enchufé en f:

double x, y;
for(i = 0; i < 500; i++)
{
    x = random(-1,1);
    y = random(-1,1);
    v = f(x, y);
    printf("%lf\n", s);
}

el problema desapareció. ¿alguien puede explicarme esto? ¡gracias de antemano! por=”” otro=”” lado,=”” cuando=”” cambié=”” mi=”” código=”” usando=”” 2=”” variables=”” que=”” llevan=”” valores=”” x=”” e=”” y=”” aleatorios=”” y=”” luego=”” los=”” enchufé=”” en=”” f:=”” double=”” x,=”” y;=”” for(i=”0;” i=”” <=”” 500;=”” i++)=”” {=”” x=”random(-1,1);” y=”random(-1,1);” v=”f(x,” y);=”” printf(“%lf\n”,=”” s);=”” }=”” el=”” problema=”” desapareció.=”” ¿alguien=”” puede=”” explicarme=”” esto?=”” ¡gracias=”” de=””></y<1).

por otro lado, cuando cambié mi código usando 2 variables que llevan valores x e y aleatorios y luego los enchufé en f:

double x, y;
for(i = 0; i < 500; i++)
{
    x = random(-1,1);
    y = random(-1,1);
    v = f(x, y);
    printf("%lf\n", s);
}

el problema desapareció. ¿alguien puede explicarme esto? ¡gracias de antemano!></math.h></stdlib.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con la primera implementación del código es que cada llamada a la función random genera un nuevo conjunto de valores aleatorios tanto para x como para y, por lo tanto es posible obtener valores para x e y que estén fuera del rango de -1 < x < 1 y -1 < y < 1. Esto hace que la función f devuelva valores que están fuera del rango esperado de -1 < f(x,y) < 1.

    En la segunda implementación, los valores de x e y se generan fuera del bucle y se mantienen constantes en cada iteración, asegurando así que siempre estén dentro del rango de -1 < x < 1 y -1 < y < 1.

    Para solucionar el problema en la primera implementación, los valores de x e y generados por la función random deben ser verificados antes de llamar a la función f para asegurarse de que estén dentro del rango esperado. Si no están dentro del rango, se deben generar nuevos valores aleatorios hasta encontrar valores válidos.

Comments are closed.