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" |
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))); |
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 |
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 |
} |
} |
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 |
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 |
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)), |
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; |
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)); |
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 |