[Mono-bugs] [Bug 361973] New: System. Random never returns smallest value if range is negative

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Thu Feb 14 16:20:32 EST 2008


https://bugzilla.novell.com/show_bug.cgi?id=361973


           Summary: System.Random never returns smallest value if range is
                    negative
           Product: Mono: Class Libraries
           Version: unspecified
          Platform: x86
        OS/Version: Ubuntu
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: System
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: boykin at pobox.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---


Description of Problem:

If one uses System.Random.Next(low, high) with a negative value for low, it
will never return low as the random sample.


Steps to reproduce the problem:
1. Call System.Random.Next(-1,1)
2. see that it always returns 0 (never -1 as it should do half the time).


Actual Results:
0 is returned.

Expected Results:
-1 approximately half the time, 0 approximately half the time.

How often does this happen? 
every time.

Additional Information:
The bug is actually quite easy to fix.  In System.Random there is a line in
Next(int, int) that looks like:

 int result = (int)(Sample () * diff + minValue);

The problem is that (int) rounds towards zero.  You really want Math.Floor,
which rounds towards negative infinity.  If minValue is negative and Sample()
returns a number greater than zero (which it practically always will) result
will never equal minValue.

It should be:


 int result = Math.Floor (Sample () * diff + minValue);

or cast the Sample () * diff to a uint first (since it must fit as the
difference of two ints), and the rounding towards zero in that case is correct.

 int result = (int)((uint)(Sample () * diff) + minValue);


-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the mono-bugs mailing list