2011-06-11 57 views
0

讓我們說,我想獲得一個隨機至極值是:獲取隨機雙值最爲接近另一雙值(但仍是隨機的)

  1. 大於-0.150
  2. 小於0.150
  3. 最貼近0.440

此號碼必須是隨機的...

我該怎麼做?


附加信息:

就像你說的... 0.440不在[-0.150,0.150],但我需要在這個範圍內接近數生成數...

讓的說,我稱之爲:

getMyRandomNumber(-0.150, 0.150, 0.440) 

我想獲得一個數的範圍爲[-0.150,0.150],但它不是永諾0.150

我想獲得號碼,如0.139,0.140,0.121,...

如果我稱之爲:

getMyRandomNumber(-0.150, 0.150, -0.440) 

我想獲得的數字像-0.139,-0.140,-0.121,。 ..

+2

「最接近」相比什麼?此外,0.44不在[-0.15,0.15]區間 – Andrei 2011-06-11 12:29:27

+2

這是一個技巧性問題 - 在該範圍內最接近.44的值是.15 – Hogan 2011-06-11 12:30:25

+0

您能澄清一下您的意思嗎?「最接近0.440」?這是否意味着您在該範圍內選擇了兩個隨機值,然後返回兩者中的較大值? – 2011-06-11 12:31:15

回答

2
Random's NextDouble()

返回0.0和1.0

之間的隨機數

如果您想根據NextDouble()中的隨機數在區間(a,b)中獲得一個隨機數,則需要將您得到的(0.0,1.0)間隔映射到(a,b)區間你需要。

的最簡單的方法是使用以下公式: result = a + (b - a) * X 其中X是從NextDouble()

結果如果X是0,那麼resulta,如果X是1,那麼resultb,用於之間X 0.0和1.0的result將在ab之間。

如果您希望數字接近某個數字(比如0.44),但不超過0.15,則需要將結果映射到(0.44 - 0.15,0.44 + 0.15)區間。

0
Random g = new Random(); 
double max = double.MaxValue; 
double a = g.NextDouble() * max - 0.150; // greater then -0.15 
double b = -g.NextDouble() * max + 0.150; // less then 0.15 

最密切是沒有明確定義