Rev 1 | Rev 11 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1 | Rev 8 | ||
---|---|---|---|
Line 209... | Line 209... | ||
209 | int IRandomBetween(int pA, int pB) { |
209 | int IRandomBetween(int pA, int pB) { |
210 | int num; |
210 | int num; |
211 | //char s[32]; // Pierre-Marie Baty -- unused variable |
211 | //char s[32]; // Pierre-Marie Baty -- unused variable |
212 | 212 | ||
213 | num = rand(); |
213 | num = rand(); |
214 | #if RAND_MAX |
214 | #if (INT_MAX > 0x7fffffff) && (RAND_MAX == 0x7fff) // Pierre-Marie Baty -- this hack just doesn't work when sizeof(int) == 32 (e.g. on Windows) |
215 | // If RAND_MAX == 0x7fff, then `num` can be seen as a fixed point number with 15 fractional and 17 integral bits |
215 | // If RAND_MAX == 0x7fff, then `num` can be seen as a fixed point number with 15 fractional and 17 integral bits |
216 | return pA + ((num * (pB + 1 - pA)) >> 15); |
216 | return pA + ((num * (pB + 1 - pA)) >> 15); |
217 | #else |
217 | #else |
218 | // If RAND_MAX != 0x7fff, then use floating numbers (alternative is using modulo) |
218 | // If RAND_MAX != 0x7fff, then use floating numbers (alternative is using modulo) |
219 | return pA + (int)((pB + 1 - pA) * (num / ((float)RAND_MAX + 1))); |
219 | return pA + (int)((pB + 1 - pA) * (num / ((float)RAND_MAX + 1))); |