質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

125閲覧

iosでの0~1までの乱数の生成

sena14

総合スコア109

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/12/27 05:57

以前の質問で教えていただいた内容について調べてみたのですが、どれを参考にしていいのやら困っています。
参考にするべきサイト、または方法自体教えていただければありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/12/27 06:04

>どれを参考に 迷っている候補を挙げてください
sena14

2017/12/27 06:07

rand()を使えと紹介されているけど、swiftでは使えなかったりswiftで検索しても整数の乱数生成しか出てこなかったりと、そもそもこれといった記事が見つけられずに困っています。
guest

回答2

0

rand()そのものである必要はないでしょう。
rand()を使っている記事が見つかったのであれば「rand() → 整数の乱数」と置き換えて読めばいいです。

投稿2017/12/27 06:49

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sena14

2017/12/28 05:08

https://qiita.com/shu223/items/489b1b9193dc1b53308b このページを見つけたのですが、ARC4RANDOM_MAXにしろRAND_MAXにしろ要は取り得る値の最大値で割ることで1以下にしているという認識で良いのでしょうか? またその場合このサイトでは #define ARC4RANDOM_MAX 0x100000000 と定義していますがswiftでARC4RANDOM_MAXというのはどの様に定義すれば良いのでしょうか? 0x100000000というのが理解できないのですがどの様に出てきた数値なのでしょうか?
fuzzball

2017/12/28 05:40 編集

最大である必要はありませんが、そういう認識でいいと思います。 0〜1に正規化しているということです。 0x100000000は十分に大きな値という意味でしょう。 どの程度大きければ良いかは用途次第です。(前回の質問で、あなたが100ではダメだと書いていましたが、まぁそういうことです) 用途によらず汎用化したいのであれば UInt32.max か、ギリギリ過ぎて不安なら Int32.max にしておくとか。
sena14

2017/12/28 05:53

最大値でなくても良いとなると1を超える値が出てきてしまうのではないですか? 0x100000000って0にならないんですか? そこが大きな値という認識ができなくて、、、 (float)arc4random()/ARC4RANDOM_MAX)でUInt32.maxを使った書き方をすると(float)arc4random(UInt32.max)/UInt32.max)となるということですか?
fuzzball

2017/12/28 06:02 編集

あぁ、失礼。記事ではarc4random()を使っているのですね。arc4random()は「0 to (2**32)-1」の値を返しますので、その値に+1して 0x100000000 を使っています。 で、調べてみると分かりますが、乱数取得にはarc4random()ではなくarc4random_uniform()を使うことをお勧めします。
sena14

2017/12/28 15:36

arc4random_uniformを使った場合(float)arc4random_uniform(UInt32.max)/UInt32.max)ということでしょうか?
sena14

2017/12/31 01:44

上記の方法でやってみたところ0しか生成されません。 どう修正すれば良いのでしょうか?
guest

0

ベストアンサー

0しか生成されないのはUint32型で除算をしているからではないでしょうか。
下記のように除算の前に各項をDobule型、もしくは、Float型に変換すればよいと考えます。

let actual = Double(arc4random_uniform(UInt32.max))/Double(UInt32.max - 1)
print(actual)

投稿2018/01/02 05:01

編集2018/01/02 12:10
nakasho_dev

総合スコア2655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sena14

2018/01/02 12:01

ありがとうございます。 無事それらしい値が表示されました。 ちなみに質問の内容はこの方法で実装できていますかね?
nakasho_dev

2018/01/02 12:11

質問の内容というのが「0から1の乱数」ということであれば、母数がUint32.maxのままだと1多くなるので、回答文の式を変更しました。
nakasho_dev

2018/01/02 13:04

iOSと関係ないページを提示いただいているようですが、乱数発生器についてはOSや言語で色々と使用は異なるのではないでしょうかね。
sena14

2018/01/02 13:06

なるほど、今回は1を引くことが正しいということですね。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問