人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Flashでランダムな値を得たいのですが、
たとえば10から20までと制限したうえで、さらにランダムに正負を付けるにはどうすればよいでしょうか?

-20<x<-10 であり、かつ 10<x<20 といった感じです。
また、端っこの数値は厳密に出す必要はありません。
20や10は出ても良いですし、出なくても結構です。
ですので、細かいことは気にせずにできるだけ短めなものをお願いします。

●質問者: matsumos
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Flash ランダム
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● gday
●40ポイント
rand = Math.random() - 0.5;
if(rand < 0){

rand = rand * 20 - 10 ;

} else {

rand = rand * 20 + 10 ;

}
◎質問者からの返答

ご解答ありがとうございます。

なるほど、if文を使うのですね。

わかりやすく解答してくださってありがとうございます。

次は、もう少し短い感じになるといいですね。

たとえば、if文を使わない方法ってあるのでしょうか。


2 ● pahoo
●40ポイント
x = (Math.random() - 0.5) * 20;
if (r >= 0) x += 10;
else x -= 10;

こんな数式でいかがでしょうか。

乱数 x の範囲は

-20 \lt x \lt -10 ,\,\, +10 \le x \lt +20

となります。

◎質問者からの返答

ご回答ありがとうございます。

ifってこんな書き方もあるんですね。

とても勉強になります。ありがとうございます。

早くもかなり短くなってきて、感激です。

ほかの解答もお待ちしております。


3 ● GoldenDawn
●30ポイント
v = Math.random() * 2 - 1 ;
v = (v + (v > 0 ? 1 : -1)) * 10 ;
◎質問者からの返答

ご回答ありがとうございます。

すごい、二行になるんですね!

これはいつか見た、条件演算子ってやつしょうか?

なるほど、こう使うんですね。

大変勉強になります。

ありがとうございます。

やっぱり皆さんifやif的な物を使われますね。

そうなると、ifを使わない感じのやりかたが、果たして存在するのかも気になります。


4 ● GoldenDawn
●30ポイント
v = (Math.random() + 1) * (Math.random() > 0.5 ? 1 : -1) * 10 ;

長さはあまり変わらないけど 1行で。

◎質問者からの返答

何度もご回答いただきまして、ありがとうございます。

1行きましたね!やった!

本当にありがとうございます。

ところで、これどうやって使うんでしょうか?

という条件でしたが、たとえば

という感じにしたいとき、数値をどう変更するかです。

よろしくお願いします。


5 ● GoldenDawn
●50ポイント

条件分岐を使わないやり方

v = Math.random() * 20 - 10 ;
v = v + 10 * v / Math.abs(v) ;

1000<x<-60 であり、かつ 60<x<1000

(↑ -1000 < x < -60 だと思いますが)

正負それぞれの幅の大きさは 1000 - 60 = 940

0?940 の乱数を生成して 60 底上げ

1/2 の確立で正負に分ける

v = ((Math.random() * 940) + 60) * (Math.random() > 0.5 ? 1 : -1) ;
◎質問者からの返答

どうもありがとうございます!

大変よくわかりました。

if文を使わないものまで書いてくださってありがとうございます。

本当に勉強になりました。

この問題について、もう何も思い残すことはありません!

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ