generating_20pseudo-random_20numbers
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
generating_20pseudo-random_20numbers [2018/03/31 13:19] – external edit 127.0.0.1 | generating_20pseudo-random_20numbers [2024/01/05 00:22] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 38: | Line 38: | ||
mov [seed],eax | mov [seed],eax | ||
ret | ret | ||
- | You can test the code from BASIC as follows:\\ \\ | + | You can test the code from BASIC as follows: |
+ | |||
+ | <code bb4w> | ||
CALL Randomise | CALL Randomise | ||
FOR I% = 1 TO 20 | FOR I% = 1 TO 20 | ||
PRINT ~ USR(Rnd) | PRINT ~ USR(Rnd) | ||
NEXT | NEXT | ||
+ | </ | ||
+ | |||
==== RND(N) ==== | ==== RND(N) ==== | ||
\\ The subroutine below provides a direct equivalent to RND(N), where N is a positive integer greater than 1. Each time it is called it returns a pseudo-random integer in the range 1 to N, in the eax register:\\ \\ | \\ The subroutine below provides a direct equivalent to RND(N), where N is a positive integer greater than 1. Each time it is called it returns a pseudo-random integer in the range 1 to N, in the eax register:\\ \\ | ||
Line 58: | Line 62: | ||
inc eax | inc eax | ||
ret | ret | ||
- | The parameter N is passed to the subroutine in the ebx register. If you prefer to return a number in the range 0 to N-1 just delete the **inc eax** instruction.\\ \\ You can test the code from BASIC as follows:\\ \\ | + | The parameter N is passed to the subroutine in the ebx register. If you prefer to return a number in the range 0 to N-1 just delete the **inc eax** instruction.\\ \\ You can test the code from BASIC as follows: |
+ | |||
+ | <code bb4w> | ||
CALL Randomise | CALL Randomise | ||
FOR I% = 1 TO 20 | FOR I% = 1 TO 20 | ||
Line 64: | Line 70: | ||
PRINT USR(RndRange) | PRINT USR(RndRange) | ||
NEXT | NEXT | ||
+ | </ | ||
+ | |||
==== RND(1) ==== | ==== RND(1) ==== | ||
\\ The subroutine below provides a direct equivalent to RND(1). Each time it is called it returns a pseudo-random 64-bit floating-point value (double) in the range 0.0 to 1.0:\\ \\ | \\ The subroutine below provides a direct equivalent to RND(1). Each time it is called it returns a pseudo-random 64-bit floating-point value (double) in the range 0.0 to 1.0:\\ \\ | ||
Line 82: | Line 90: | ||
mov [ebx+4],ecx | mov [ebx+4],ecx | ||
ret | ret | ||
- | The value is returned in memory at the address passed in the ebx register.\\ \\ You can test the code from BASIC as follows:\\ \\ | + | The value is returned in memory at the address passed in the ebx register.\\ \\ You can test the code from BASIC as follows: |
+ | |||
+ | <code bb4w> | ||
CALL Randomise | CALL Randomise | ||
FOR I% = 1 TO 20 | FOR I% = 1 TO 20 | ||
Line 89: | Line 99: | ||
PRINT R# | PRINT R# | ||
NEXT | NEXT | ||
+ | </ |
generating_20pseudo-random_20numbers.1522502362.txt.gz · Last modified: 2024/01/05 00:17 (external edit)