/[guile]/guile/guile-core/libguile/random.c
ViewVC logotype

Diff of /guile/guile-core/libguile/random.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.48 by ttn, Thu Mar 14 03:47:42 2002 UTC revision 1.49 by xxhanwen, Sat Jul 20 14:08:34 2002 UTC
# Line 362  SCM_GLOBAL_VARIABLE_INIT (scm_var_random Line 362  SCM_GLOBAL_VARIABLE_INIT (scm_var_random
362    
363  SCM_DEFINE (scm_random, "random", 1, 1, 0,  SCM_DEFINE (scm_random, "random", 1, 1, 0,
364              (SCM n, SCM state),              (SCM n, SCM state),
365              "Return a number in [0,N).\n"              "Return a number in [0, N).\n"
366              "\n"              "\n"
367              "Accepts a positive integer or real n and returns a\n"              "Accepts a positive integer or real n and returns a\n"
368              "number of the same type between zero (inclusive) and\n"              "number of the same type between zero (inclusive) and\n"
# Line 378  SCM_DEFINE (scm_random, "random", 1, 1, Line 378  SCM_DEFINE (scm_random, "random", 1, 1,
378  {  {
379    if (SCM_UNBNDP (state))    if (SCM_UNBNDP (state))
380      state = SCM_VARIABLE_REF (scm_var_random_state);      state = SCM_VARIABLE_REF (scm_var_random_state);
381    SCM_VALIDATE_RSTATE (2,state);    SCM_VALIDATE_RSTATE (2, state);
382    if (SCM_INUMP (n))    if (SCM_INUMP (n))
383      {      {
384        unsigned long m = SCM_INUM (n);        unsigned long m = SCM_INUM (n);
385        SCM_ASSERT_RANGE (1,n,m > 0);        SCM_ASSERT_RANGE (1, n, m > 0);
386        return SCM_MAKINUM (scm_c_random (SCM_RSTATE (state), m));        return SCM_MAKINUM (scm_c_random (SCM_RSTATE (state), m));
387      }      }
388    SCM_VALIDATE_NIM (1,n);    SCM_VALIDATE_NIM (1, n);
389    if (SCM_REALP (n))    if (SCM_REALP (n))
390      return scm_make_real (SCM_REAL_VALUE (n)      return scm_make_real (SCM_REAL_VALUE (n)
391                            * scm_c_uniform01 (SCM_RSTATE (state)));                            * scm_c_uniform01 (SCM_RSTATE (state)));
# Line 401  SCM_DEFINE (scm_copy_random_state, "copy Line 401  SCM_DEFINE (scm_copy_random_state, "copy
401  {  {
402    if (SCM_UNBNDP (state))    if (SCM_UNBNDP (state))
403      state = SCM_VARIABLE_REF (scm_var_random_state);      state = SCM_VARIABLE_REF (scm_var_random_state);
404    SCM_VALIDATE_RSTATE (1,state);    SCM_VALIDATE_RSTATE (1, state);
405    return make_rstate (scm_the_rng.copy_rstate (SCM_RSTATE (state)));    return make_rstate (scm_the_rng.copy_rstate (SCM_RSTATE (state)));
406  }  }
407  #undef FUNC_NAME  #undef FUNC_NAME
# Line 413  SCM_DEFINE (scm_seed_to_random_state, "s Line 413  SCM_DEFINE (scm_seed_to_random_state, "s
413  {  {
414    if (SCM_NUMBERP (seed))    if (SCM_NUMBERP (seed))
415      seed = scm_number_to_string (seed, SCM_UNDEFINED);      seed = scm_number_to_string (seed, SCM_UNDEFINED);
416    SCM_VALIDATE_STRING (1,seed);    SCM_VALIDATE_STRING (1, seed);
417    return make_rstate (scm_c_make_rstate (SCM_STRING_CHARS (seed),    return make_rstate (scm_c_make_rstate (SCM_STRING_CHARS (seed),
418                                           SCM_STRING_LENGTH (seed)));                                           SCM_STRING_LENGTH (seed)));
419  }  }
# Line 427  SCM_DEFINE (scm_random_uniform, "random: Line 427  SCM_DEFINE (scm_random_uniform, "random:
427  {  {
428    if (SCM_UNBNDP (state))    if (SCM_UNBNDP (state))
429      state = SCM_VARIABLE_REF (scm_var_random_state);      state = SCM_VARIABLE_REF (scm_var_random_state);
430    SCM_VALIDATE_RSTATE (1,state);    SCM_VALIDATE_RSTATE (1, state);
431    return scm_make_real (scm_c_uniform01 (SCM_RSTATE (state)));    return scm_make_real (scm_c_uniform01 (SCM_RSTATE (state)));
432  }  }
433  #undef FUNC_NAME  #undef FUNC_NAME
# Line 442  SCM_DEFINE (scm_random_normal, "random:n Line 442  SCM_DEFINE (scm_random_normal, "random:n
442  {  {
443    if (SCM_UNBNDP (state))    if (SCM_UNBNDP (state))
444      state = SCM_VARIABLE_REF (scm_var_random_state);      state = SCM_VARIABLE_REF (scm_var_random_state);
445    SCM_VALIDATE_RSTATE (1,state);    SCM_VALIDATE_RSTATE (1, state);
446    return scm_make_real (scm_c_normal01 (SCM_RSTATE (state)));    return scm_make_real (scm_c_normal01 (SCM_RSTATE (state)));
447  }  }
448  #undef FUNC_NAME  #undef FUNC_NAME
# Line 496  SCM_DEFINE (scm_random_solid_sphere_x, " Line 496  SCM_DEFINE (scm_random_solid_sphere_x, "
496              "The sum of the squares of the numbers is returned.")              "The sum of the squares of the numbers is returned.")
497  #define FUNC_NAME s_scm_random_solid_sphere_x  #define FUNC_NAME s_scm_random_solid_sphere_x
498  {  {
499    SCM_VALIDATE_VECTOR_OR_DVECTOR (1,v);    SCM_VALIDATE_VECTOR_OR_DVECTOR (1, v);
500    if (SCM_UNBNDP (state))    if (SCM_UNBNDP (state))
501      state = SCM_VARIABLE_REF (scm_var_random_state);      state = SCM_VARIABLE_REF (scm_var_random_state);
502    SCM_VALIDATE_RSTATE (2,state);    SCM_VALIDATE_RSTATE (2, state);
503    scm_random_normal_vector_x (v, state);    scm_random_normal_vector_x (v, state);
504    vector_scale (v,    vector_scale (v,
505                  pow (scm_c_uniform01 (SCM_RSTATE (state)),                  pow (scm_c_uniform01 (SCM_RSTATE (state)),
# Line 519  SCM_DEFINE (scm_random_hollow_sphere_x, Line 519  SCM_DEFINE (scm_random_hollow_sphere_x,
519              "unit n-sphere.")              "unit n-sphere.")
520  #define FUNC_NAME s_scm_random_hollow_sphere_x  #define FUNC_NAME s_scm_random_hollow_sphere_x
521  {  {
522    SCM_VALIDATE_VECTOR_OR_DVECTOR (1,v);    SCM_VALIDATE_VECTOR_OR_DVECTOR (1, v);
523    if (SCM_UNBNDP (state))    if (SCM_UNBNDP (state))
524      state = SCM_VARIABLE_REF (scm_var_random_state);      state = SCM_VARIABLE_REF (scm_var_random_state);
525    SCM_VALIDATE_RSTATE (2,state);    SCM_VALIDATE_RSTATE (2, state);
526    scm_random_normal_vector_x (v, state);    scm_random_normal_vector_x (v, state);
527    vector_scale (v, 1 / sqrt (vector_sum_squares (v)));    vector_scale (v, 1 / sqrt (vector_sum_squares (v)));
528    return SCM_UNSPECIFIED;    return SCM_UNSPECIFIED;
# Line 538  SCM_DEFINE (scm_random_normal_vector_x, Line 538  SCM_DEFINE (scm_random_normal_vector_x,
538  #define FUNC_NAME s_scm_random_normal_vector_x  #define FUNC_NAME s_scm_random_normal_vector_x
539  {  {
540    int n;    int n;
541    SCM_VALIDATE_VECTOR_OR_DVECTOR (1,v);    SCM_VALIDATE_VECTOR_OR_DVECTOR (1, v);
542    if (SCM_UNBNDP (state))    if (SCM_UNBNDP (state))
543      state = SCM_VARIABLE_REF (scm_var_random_state);      state = SCM_VARIABLE_REF (scm_var_random_state);
544    SCM_VALIDATE_RSTATE (2,state);    SCM_VALIDATE_RSTATE (2, state);
545    n = SCM_INUM (scm_uniform_vector_length (v));    n = SCM_INUM (scm_uniform_vector_length (v));
546    if (SCM_VECTORP (v))    if (SCM_VECTORP (v))
547      while (--n >= 0)      while (--n >= 0)
548        SCM_VELTS (v)[n] = scm_make_real (scm_c_normal01 (SCM_RSTATE (state)));        SCM_VECTOR_SET (v, n, scm_make_real (scm_c_normal01 (SCM_RSTATE (state))));
549    else    else
550      while (--n >= 0)      while (--n >= 0)
551        ((double *) SCM_VELTS (v))[n] = scm_c_normal01 (SCM_RSTATE (state));        ((double *) SCM_VELTS (v))[n] = scm_c_normal01 (SCM_RSTATE (state));
# Line 564  SCM_DEFINE (scm_random_exp, "random:exp" Line 564  SCM_DEFINE (scm_random_exp, "random:exp"
564  {  {
565    if (SCM_UNBNDP (state))    if (SCM_UNBNDP (state))
566      state = SCM_VARIABLE_REF (scm_var_random_state);      state = SCM_VARIABLE_REF (scm_var_random_state);
567    SCM_VALIDATE_RSTATE (1,state);    SCM_VALIDATE_RSTATE (1, state);
568    return scm_make_real (scm_c_exp1 (SCM_RSTATE (state)));    return scm_make_real (scm_c_exp1 (SCM_RSTATE (state)));
569  }  }
570  #undef FUNC_NAME  #undef FUNC_NAME

Legend:
Removed from v.1.48  
changed lines
  Added in v.1.49

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26