SERIOUS Seed Bug
Archives Forums/BlitzPlus Bug Reports/SERIOUS Seed Bug
| ||
This is bad. SeedRnd $24E7AC60 a=Rand(0,8) Print a Input b$ The random number generated is 9. Bit of a problem when you are picking a random column for a number when generating a Sudoku puzzle when the Sudoku array is only (8,8) - Array Index out of Bounds. So I wrote some code to see how often this happens - I stopped it from running after it found the first 9 seeds that cause Rand() to return numbers outside the specified range. That means that I only checked the first 267,250,961 positive seeds from a possible 2,147,483,647 - not counting the negative seeds. If you run the following code, you will see that all nine of these seeds caused Rand(0,8) to return 9. For x=1 To 9 Read a SeedRnd a Print Rand(0,8) Next b$=Input$() ;for pause purposes Data $012ADB51,$03b0c470,$04db9fc1,$076188e0,$088c6431 Data $0b124d50,$0c3d28a1,$0ec311c0,$0feded11 What's even more bizarre - given that I already know that Blitz2D doesn't generate the same random numbers from the same seeds as BlitzPlus, is that when I run the final piece of code above in Blitz2D - all of the above seeds return 8 (including the seed in the first example that caused my prog to crash). So maybe there isn't an algorithmic difference in the random number generators afterall - just a few bugs in the BlitzPlus version. |
| ||
...when I run the final piece of code above in Blitz2D - all of the above seeds return 8 And also in Blitz3D. |
| ||
So, anything happening? |
| ||
Someone wrote a better random number generator. Morduun i think? You could search the code archives. |
| ||
Someone wrote a better random number generator. Morduun i think? You could search the code archives. http://www.denathorn.co.uk/Files/mersennetwist.zip I'm sure thats it! :) |
| ||
You could always work round the problem by sticking a Mod 9 On the end of it. Print Rand(0,8) Mod 9 I accept not an ideal solution, but you won't get any out of range errors and the results will be predictable. |
| ||
Funny thing when you use rnd instead of rand it works fine. |