Eliminating multiple srand() calls gives 99.7% performance savings.
(for this function).

At least in my glibc, every srand() call does 310 rand() calls to
fill an internal 48-bytes array - for lrand48 and similar.


Index: trunk/src/sys_unix.c
===================================================================
--- trunk/src/sys_unix.c        (Revision 15)
+++ trunk/src/sys_unix.c        (Revision 16)
@@ -293,16 +293,16 @@

 int SYS_Random(int iSeed, float fStart, float fEnd)
 {
-
+       static int iInitialized=0;
        int iRandNum = 0;

-       if (iSeed != 0)
+       if (iInitialized == 0)
        {
-               srand(iSeed);
+               srand(SYS_GetSeed());
+               iInitialized=1;
        }

        iRandNum = 1 + (int) (fEnd * rand() / (RAND_MAX + fStart));
-       srand(iRandNum);

        return iRandNum;
 }

_______________________________________________
Muscle mailing list
[email protected]
http://lists.drizzle.com/mailman/listinfo/muscle

Reply via email to