2012-01-02 14 views
1

私はこれをしばらく試してきましたが、これまでのところ運がなかったのです。iOS上の高精度乱数

iOSで2つの非常に正確な数字の間の乱数を取得する最も簡単な方法は何ですか?

たとえば、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

あなたは出力を正規化することができます:私はこれを試してみました

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

[注:これはpしたい任意の範囲にrandのure C、Obj-Cで同等に動作すると仮定しています。]

[注2:doubleを適切なデータタイプに置き換えてください。]

[注3:randには、必要に応じて任意の乱数ソースを置き換えてください。]

+0

私はこれを試しました: 'double min = 41.37783830549337; double max = 41.377730629131634; double test =((double)rand()/ RAND_MAX)*(max - min)+ min; NSLog(@ "Min:%lf、max:%lf、結果:%lf"、min、max、test); - しかし、私が望む精度を与えるようには思われません。 41.377838、最大:41.377731、結果:41.377838 –

+0

@Oscar:数値を表示するときに数値をどのように書式化しているかのアーティファクトです。私はObj-Cを知らないのですが、 'NSLog'が' printf'のようなものならば、例えば、 '%.15f'。 –

+0

@Oscar:倍精度は小数点以下15桁から16桁までの精度に相当します。それ以上のものが必要な場合は、より正確なタイプが必要です。しかし、これは、範囲内の乱数を生成することとは別の問題です。 –