Showing the changes to src/core/ulib_std.cpp (1 of 7 files). Show all
Unified · Split
| @@ -152,6 +152,8 @@ static t_CKUINT Cereal_offset_data = 0; · 151 unmodified lines | ||
| 152 | 152 | #endif |
| 153 | 153 | |
| 154 | 154 | |
| 155 | +// variable to random max | |
| 156 | +static t_CKINT g_randMax = CK_RANDOM_MAX; | |
| 155 | 157 | |
| 156 | 158 | |
| 157 | 159 | //----------------------------------------------------------------------------- |
| @@ -187,7 +189,7 @@ DLL_QUERY libstd_query( Chuck_DL_Query * QUERY ) · 29 unmodified lines | ||
| 187 | 189 | QUERY->doc_func( QUERY, "Return absolute value of float." ); |
| 188 | 190 | |
| 189 | 191 | // 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 | |
| 191 | 193 | QUERY->doc_func( QUERY, "generate a random integer between 0 and Std.RAND_MAX. (NOTE: this is deprecated; use Math.random())." ); |
| 192 | 194 | |
| 193 | 195 | // add rand2 |
| @@ -209,7 +211,11 @@ DLL_QUERY libstd_query( Chuck_DL_Query * QUERY ) · 15 unmodified lines | ||
| 209 | 211 | // add srand |
| 210 | 212 | QUERY->add_sfun( QUERY, srand_impl, "void", "srand" ); |
| 211 | 213 | 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()." ); | |
| 213 | 219 | |
| 214 | 220 | // add sgn |
| 215 | 221 | 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 | ||
| 328 | 334 | |
| 329 | 335 | // seed rand() |
| 330 | 336 | // (NOTE: ck_srandom(time(NULL)) is invoked in ulib_math.cpp) |
| 331 | − srand( (unsigned)time( NULL ) ); | |
| 337 | + // srand( (unsigned)time( NULL ) ); | |
| 332 | 338 | |
| 333 | 339 | Chuck_DL_Func * func = NULL; |
| 334 | 340 | |
| @@ -623,20 +629,6 @@ error: · 288 unmodified lines | ||
| 623 | 629 | return FALSE; |
| 624 | 630 | } |
| 625 | 631 | |
| 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 | − | |
| 640 | 632 | // abs |
| 641 | 633 | CK_DLL_SFUN( abs_impl ) |
| 642 | 634 | { |
| @@ -655,20 +647,22 @@ CK_DLL_SFUN( fabs_impl ) · 12 unmodified lines | ||
| 655 | 647 | // rand |
| 656 | 648 | CK_DLL_SFUN( rand_impl ) |
| 657 | 649 | { |
| 658 | − RETURN->v_int = ::rand(); | |
| 650 | + // 1.5.0.1 (ge) use ck_random() | |
| 651 | + RETURN->v_int = ck_random(); | |
| 659 | 652 | } |
| 660 | 653 | |
| 661 | 654 | // randf |
| 662 | 655 | CK_DLL_SFUN( randf_impl ) |
| 663 | 656 | { |
| 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 ); | |
| 665 | 659 | } |
| 666 | 660 | |
| 667 | 661 | // randf |
| 668 | 662 | CK_DLL_SFUN( rand2f_impl ) |
| 669 | 663 | { |
| 670 | 664 | 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); | |
| 672 | 666 | } |
| 673 | 667 | |
| 674 | 668 | // randi |
| @@ -681,18 +675,15 @@ CK_DLL_SFUN( rand2_impl ) // inclusive. · 6 unmodified lines | ||
| 681 | 675 | { |
| 682 | 676 | RETURN->v_int = min; |
| 683 | 677 | } |
| 684 | − //else if ( range < RAND_MAX / 2 ) { | |
| 685 | − // RETURN->v_int = ( range > 0 ) ? min + irand_exclusive(1 + range) : max + irand_exclusive ( -range + 1 ) ; | |
| 686 | − //} | |
| 687 | 678 | else |
| 688 | 679 | { |
| 689 | 680 | if( range > 0 ) |
| 690 | 681 | { |
| 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) ) ); | |
| 692 | 683 | } |
| 693 | 684 | else |
| 694 | 685 | { |
| 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) ) ); | |
| 696 | 687 | } |
| 697 | 688 | } |
| 698 | 689 | } |
| @@ -701,7 +692,8 @@ CK_DLL_SFUN( rand2_impl ) // inclusive. · 2 unmodified lines | ||
| 701 | 692 | CK_DLL_SFUN( srand_impl ) |
| 702 | 693 | { |
| 703 | 694 | 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 ); | |
| 705 | 697 | } |
| 706 | 698 | |
| 707 | 699 | // sgn |