2012-01-02 106 views
1

我一直在嘗試這一段時間,但迄今爲止還沒有任何運氣。iOS上的高精度隨機數

什麼是在iOS上的兩個非常精確的數字之間檢索隨機數的最簡單方法?

例如,我想要一個介於41.37783830549337和41.377730629131634之間的隨機數字,我將如何完成此操作?

非常感謝你提前!

編輯:我想這:

double min = 41.37783830549337; 
double max = 41.377730629131634; 
double test = ((double)rand()/RAND_MAX) * (max - min) + min; 
NSLog(@"Min:%lf, max:%lf, result:%lf",min,max,test); 

但結果是不太一樣精確,因爲我希望,並弄成這個樣子::

Min:41.377838, max:41.377731, result:41.377838 

回答

6

您可以正常化輸出的rand任何範圍內你想要的:

((double)rand()/RAND_MAX) * (max - min) + min 

[注:這是對p ure C,我假設它在Obj-C中等價地起作用。]

[注2:用適當的數據類型替換double]

[注3:將rand替換爲您選擇的隨機數來源。]

+0

我試過這個:'double min = 41.37783830549337; double max = 41.377730629131634; ((double)rand()/ RAND_MAX)*(max_min)+ min; NSLog(@「Min:%lf,max:%lf,result:%lf」,min,max,test);' - 但它似乎沒有給出我想要的精度,並且回顯出來:Min: 41.377838,最大值:41.377731,結果:41.377838 – 2012-01-02 22:47:47

+0

@Oscar:這是您在顯示數字時如何格式化的工具。我不知道Obj-C,但是如果'NSLog'像'printf'一樣工作,那麼嘗試使用例如'%.15f'。 – 2012-01-02 22:49:54

+0

@Oscar:還請注意,雙精度相當於大約15-16小數位的精度。如果您需要更多,則需要更精確的類型。但這是一個單獨的問題,而不是在一個範圍內生成隨機數的問題。 – 2012-01-02 22:50:56