History

update to ck_random()

Ge Wang committed 3 years ago

Commit 2f2c9671 parent 170b70a7 files · +74 −75Browse files

Showing the changes to src/core/ulib_std.cpp (1 of 7 files). Show all

Unified · Split

src/core/ulib_std.cpp+18−26
@@ -152,6 +152,8 @@ static t_CKUINT Cereal_offset_data = 0; · 151 unmodified lines
152152 #endif
153153
154154
155+// variable to random max
156+static t_CKINT g_randMax = CK_RANDOM_MAX;
155157
156158
157159 //-----------------------------------------------------------------------------
@@ -187,7 +189,7 @@ DLL_QUERY libstd_query( Chuck_DL_Query * QUERY ) · 29 unmodified lines
187189 QUERY->doc_func( QUERY, "Return absolute value of float." );
188190
189191 // add rand
190− QUERY->add_sfun( QUERY, rand_impl, "int", "rand"); //! return int between 0 and RAND_MAX
192+ QUERY->add_sfun( QUERY, rand_impl, "int", "rand"); //! return int between 0 and max
191193 QUERY->doc_func( QUERY, "generate a random integer between 0 and Std.RAND_MAX. (NOTE: this is deprecated; use Math.random())." );
192194
193195 // add rand2
@@ -209,7 +211,11 @@ DLL_QUERY libstd_query( Chuck_DL_Query * QUERY ) · 15 unmodified lines
209211 // add srand
210212 QUERY->add_sfun( QUERY, srand_impl, "void", "srand" );
211213 QUERY->add_arg( QUERY, "int", "seed" );
212− QUERY->doc_func( QUERY, "seed the random number generator. Different seeds will likely generate different sequences of random numbers even if the seeds are close together; alternatively, a sequence of random numbers can be repeated by setting the same seed." );
214+ QUERY->doc_func( QUERY, "seed the random number generator. Different seeds will likely generate different sequences of random numbers even if the seeds are close together; alternatively, a sequence of random numbers can be repeated by setting the same seed. (NOTE: this is deprecated; use Math.srandom())" );
215+
216+ // random max
217+ QUERY->add_svar( QUERY, "int", "RAND_MAX", TRUE, &g_randMax );
218+ QUERY->doc_var( QUERY, "The largest possible value returned by Std.rand()." );
213219
214220 // add sgn
215221 QUERY->add_sfun( QUERY, sgn_impl, "float", "sgn" ); //! return sign of value (-1, 0, 1)
@@ -328,7 +334,7 @@ DLL_QUERY libstd_query( Chuck_DL_Query * QUERY ) · 112 unmodified lines
328334
329335 // seed rand()
330336 // (NOTE: ck_srandom(time(NULL)) is invoked in ulib_math.cpp)
331− srand( (unsigned)time( NULL ) );
337+ // srand( (unsigned)time( NULL ) );
332338
333339 Chuck_DL_Func * func = NULL;
334340
@@ -623,20 +629,6 @@ error: · 288 unmodified lines
623629 return FALSE;
624630 }
625631
626−
627−//#define RAND_INV_RANGE(r) (RAND_MAX / (r))
628−//
629−//int irand_exclusive ( int max ) {
630−// int x = ::rand();
631−//
632−// while (x >= max * RAND_INV_RANGE (max))
633−// x = ::rand();
634−//
635−// x /= RAND_INV_RANGE (max);
636−// return x;
637−//}
638−
639−
640632 // abs
641633 CK_DLL_SFUN( abs_impl )
642634 {
@@ -655,20 +647,22 @@ CK_DLL_SFUN( fabs_impl ) · 12 unmodified lines
655647 // rand
656648 CK_DLL_SFUN( rand_impl )
657649 {
658− RETURN->v_int = ::rand();
650+ // 1.5.0.1 (ge) use ck_random()
651+ RETURN->v_int = ck_random();
659652 }
660653
661654 // randf
662655 CK_DLL_SFUN( randf_impl )
663656 {
664− RETURN->v_float = ( 2.0 * ::rand() / (t_CKFLOAT)RAND_MAX - 1.0 );
657+ // 1.5.0.1 (ge) use ck_random() and CK_RANDOM_MAX
658+ RETURN->v_float = ( 2.0 * ck_random() / (t_CKFLOAT)CK_RANDOM_MAX - 1.0 );
665659 }
666660
667661 // randf
668662 CK_DLL_SFUN( rand2f_impl )
669663 {
670664 t_CKFLOAT min = GET_CK_FLOAT(ARGS), max = *((t_CKFLOAT *)ARGS + 1);
671− RETURN->v_float = min + (max-min)*(::rand()/(t_CKFLOAT)RAND_MAX);
665+ RETURN->v_float = min + (max-min)*(::ck_random()/(t_CKFLOAT)CK_RANDOM_MAX);
672666 }
673667
674668 // randi
@@ -681,18 +675,15 @@ CK_DLL_SFUN( rand2_impl ) // inclusive. · 6 unmodified lines
681675 {
682676 RETURN->v_int = min;
683677 }
684− //else if ( range < RAND_MAX / 2 ) {
685− // RETURN->v_int = ( range > 0 ) ? min + irand_exclusive(1 + range) : max + irand_exclusive ( -range + 1 ) ;
686− //}
687678 else
688679 {
689680 if( range > 0 )
690681 {
691− RETURN->v_int = min + (t_CKINT)( (1.0 + range) * ( ::rand()/(RAND_MAX+1.0) ) );
682+ RETURN->v_int = min + (t_CKINT)( (1.0 + range) * ( ::ck_random()/(CK_RANDOM_MAX+1.0) ) );
692683 }
693684 else
694685 {
695− RETURN->v_int = min - (t_CKINT)( (-range + 1.0) * ( ::rand()/(RAND_MAX+1.0) ) );
686+ RETURN->v_int = min - (t_CKINT)( (-range + 1.0) * ( ::ck_random()/(CK_RANDOM_MAX+1.0) ) );
696687 }
697688 }
698689 }
@@ -701,7 +692,8 @@ CK_DLL_SFUN( rand2_impl ) // inclusive. · 2 unmodified lines
701692 CK_DLL_SFUN( srand_impl )
702693 {
703694 t_CKINT seed = GET_CK_INT(ARGS);
704− srand( (unsigned)seed );
695+ // 1.5.0.1 (ge) updated to ck_srandom()
696+ ck_srandom( (unsigned)seed );
705697 }
706698
707699 // sgn

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t