2016-05-06 16 views
0

AndroidとiOSの両方のアプリを開発しています。このアプリでは、iOS版とAndroid版の両方で一致する擬似乱数を生成する必要があります。私はカスタム乱数ジェネレータの多くの実装を見ましたが、いくつかはC++またはPHPにあります...私はJavaとSwiftしか知りません。誰かが私を助けて、iOSとAndroidの両方で動作するランダムなジェネレータに指導してもらえますか、誰かが私自身の乱数ジェネレータを作成する方法を教えてもらえますか?iOSとAndroidの乱数生成器

編集:「試合」とは、私はそれが同じ出力ごとに単一の時間を生成するように、それをシードできるようにする必要があることを意味しました。

+0

各プラットフォームでそれをどのように実装するのが難しいですか?アンドロイド上では、新しいランダム()。nextInt() ' –

+0

あなたのために助けになることができるリンクはここにあります。 【こちら】(http://stackoverflow.com/questions/24007129/how-does-one-generate-a-random-number-in-apples-swift-language) –

+1

あなたが「一致」とはどういう意味ですか? – cyroxis

答えて

0
randomValue = arc4random() % 255; 

私はあなたが同じように播種した場合の値の同じシーケンスを生成するためにiOSとAndroidの実装を希望を意味する「マッチ」を解釈してるのiOS

0

で0〜255の間でRandome値を生成します。 Mersenne Twister, mt19937の標準実装を使用してこれを行うことができます。 Appleは、Swift on GameplayKitで実装を利用できます。あなたは同じシード値を使用してGKMersenneTwisterRandomSourceインスタンスと 互換性のある実装を初期化する場合は...、Apple's documentationによる

import GameplayKit 

let source = GKMersenneTwisterRandomSource(seed: 123) 
source.nextUniform()    // => 0.3132002 
source.nextUniform()    // => 0.5559791 
source.nextIntWithUpperBound(20) // => 13 

let source2 = GKMersenneTwisterRandomSource(seed: 123) 
source2.nextUniform()    // => 0.3132002 
source2.nextUniform()    // => 0.5559791 
source2.nextIntWithUpperBound(20) // => 13 

を、両方の生成:あなたは遊び場で、その動作と反復可能性を確認することができます 番号の同じシーケンス。

これは、リンク先のmt19937サイトからダウンロードできるC++またはJavaリファレンスの実装と "一致"する必要があると言って読んでいます。


補遺

GameplayKitの実装では、再現性のある結果が得られますが、出力は広島からのリファレンス実装と一致していないように見えます。 Here's a port私は2,3年前にmt19937の標準的なCの実装をやったことをSwiftに伝えました。これにより、同じようにシードされたときのC参照実装と同じ結果が得られます。したがって、以前提供されていたリンクでJavaポートを利用できるようになるので、プラットフォーム間で一貫性のあるソリューションが得られるはずです。

+0

それはSwiftで働いていましたが、私はまだJavaと同じように動作するコードを発見していません。 – Erosion