RAN() misbehaving - Printable Version +- yab | yet another Basic for HAIKU (https://yab.orgfree.com/forum) +-- Forum: installing / troubleshooting / feature requests (https://yab.orgfree.com/forum/forumdisplay.php?fid=5) +--- Forum: Fixing yab (https://yab.orgfree.com/forum/forumdisplay.php?fid=7) +--- Thread: RAN() misbehaving (/showthread.php?tid=15) |
RAN() misbehaving - clasqm - 07-06-2015 Description: The ran-function returns a random number. If no argument is given, the number returned is in the range from 0 to 1; where only 0 is a possible value; 1 will never be returned. If an argument is supplied, the number returned will be in the range from 0 up to this argument, whereas this argument itself is not a possible return value. OK, so RAN(7) is supposed to give me a random number between 0 and 6.9999. This is how the command has worked in every version of BASIC I've ever seen. It seems to be broken in yab. Code: ~/projects/DailyHaiku/binder> touch ran.bas Yes, those are technically random numbers. But nowhere near the range the command is supposed to give. yab 1.7.5 running on Haiku hrev49371 Let's increase that seed number to 14 Code: ~/projects/DailyHaiku/binder> rm ran.bas The same thing happens with an old (1.7) version of yab, so the problem either is in the underlying OS, or I am not understanding the documentation. RAN() without a seed number works as expected so as a workaround we can use (RAN()) * 7 In fact it is worse: if you try for f = 1 to 10 print ran() next and run it a few times the first one always seems to start with 0.3, and only after that does it start to look random at all. RE: RAN() misbehaving - bbjimmy - 07-06-2015 (07-06-2015, 01:04 PM)clasqm Wrote: for f = 1 to 10 I always use : Code: tmp=ran() and ignore the output of the first line. The rest seem to return a reasonable, sort-of random, number. It seems to be a gcc issue. RE: RAN() misbehaving - clasqm - 07-07-2015 (07-06-2015, 01:43 PM)bbjimmy Wrote: I always use : Yes, I figured that out as well, but it does not fill me with confidence. Here are two more workarounds. 99% of the time, I convert the RAN output to integer anyway, so: Code: sub RandInt() RE: RAN() misbehaving - bbjimmy - 07-08-2015 I think this has been fixed. it seems that yab seeded rand twice, once with an int that didn't work so well. I commented out that line and now it seems to work as documented. one needs to use GetLatest-yab.zip to try this out. RE: RAN() misbehaving - lorglas - 08-23-2015 Hello together, i use the ran() function as following: for i=1 to 40 x=int(ran(14)) print x next i so i get numbers from 0 to 14 (but not 14). It works fine. best regards lorglas |