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

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

新規登録して質問してみよう
ただいま回答率
85.50%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Q&A

解決済

6回答

1791閲覧

乱数を用いて-1または1を生成する高速な方法を教えて下さい。

nyantama

総合スコア11

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

0グッド

0クリップ

投稿2021/08/19 13:28

乱数を用いて-1または1を生成する方法として、以下のようなコードが挙げられますが、数学を使ってもっと高速な生成方法はないでしょうか?

javascript

1function myRand() { 2 if (random() < 0.5) { 3 return -1; 4 } else { 5 return 1; 6 } 7}

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

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

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

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

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

guest

回答6

0

知らない言語だから明確なことを言えませんが,

仮に1回の乱数取得で N bit の値を取得できるとしたら,それを N 回分の結果として使うことができると思われ,
乱数取得処理が遅い場合には,毎回乱数を取得するよりも早い可能性もあるかな? とか.

(ダメならその旨をコメントで明記する形で低評価願う)

投稿2021/08/20 01:24

fana

総合スコア11634

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

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

Zuishin

2021/08/20 02:11

面白いですね。 でも何か一定の法則が出たり値が偏ったりしませんか? JavaScript の乱数は 0 以上 1 未満の小数で IEEE754 です。
fana

2021/08/20 02:28

偏りなどに関しては私には判断できませんが, 仮に N個のbitのうちの bit位置毎にそういった傾向の強さが異なるようなことがあれば,法則性が強いbitは捨てて M<=N なる M bit だけを使うみたいな…?
guest

0

数学を使ってもっと高速な生成方法はないでしょうか?

現実問題としては、ご提示の方法で十分な速度が出るのではないかと考えます。

乱数生成自体が相応の負荷を伴う処理ですので、相対的に条件分岐1つは大した負荷にはならないと予想されます。

投稿2021/08/19 14:23

maisumakun

総合スコア145121

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

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

nyantama

2021/08/19 14:37

ご回答ありがとうございます!参考になります!!
guest

0

ifを使わず単一の式で実現してみました。

JavaScript

1Math.random().toFixed()*2-1;

投稿2021/08/19 13:37

itagagaki

総合スコア8402

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

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

itagagaki

2021/08/19 13:39

速度はわかりませんので気になるなら計測してみてください。
nyantama

2021/08/19 14:39

参考になります!!
guest

0

おもしろそうなんでやってみました。

javascript

1const x = [-1,1][Math.floor(Math.random() + 0.5)] 2console.log(x)

投稿2021/08/19 20:49

takasima20

総合スコア7458

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

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

0

ベストアンサー

速さは分からんけど、数学っぽいやつ思いついたわ

javascript

1(-1) ** (Math.random() > 0.5)

** の後ろだと、 (Math.random() > 0.5) が、 01になりよる。そやから-1 の 0乗か1乗になって、結果、1 か -1になるゆうこっちゃ。

サンプル

それか、これ

javascript

12 * (Math.random() > 0.5) - 1

でも 1 か -1 になるねんな。➡ サンプル

投稿2021/08/19 13:46

編集2021/08/19 15:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

function myRand() {
return 1;
}

これで超高速で1が生成できます

投稿2021/08/19 13:35

y_waiwai

総合スコア87719

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

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

itagagaki

2021/08/19 13:38

この回答は一体どういう意味でしょうか?
y_waiwai

2021/08/19 13:42

速度を測ってみますか?
Zuishin

2021/08/19 13:47

速度以前に要件を満たしていませんが。
y_waiwai

2021/08/19 13:50

-1を超高速で生成するコードが不足してますねw
退会済みユーザー

退会済みユーザー

2021/08/19 23:13

y_waiwai、いい加減teratailから去っていただけませんか あなたの回答は素人を弄んでますよね
y_waiwai

2021/08/19 23:16

まずはあなたが去ってみませんか。 ご自分でできないことを他人に要求する、ってのはおかしいとは思いませんか
退会済みユーザー

退会済みユーザー

2021/08/19 23:16

去らなければいけない理由は? あなたみたいにふざけた回答してませんよ
y_waiwai

2021/08/19 23:19

私が、あなたは悪だ!といえばあなたは悪もんになるんですか。 ふざけた回答をしてる、というのは、あなたの感想でしかありませんよ
退会済みユーザー

退会済みユーザー

2021/08/19 23:20

口答えしてんじゃねえよ
y_waiwai

2021/08/19 23:21

くやしいなあ。。w
Zuishin

2021/08/19 23:31 編集

弄んだりふざけたりしてるということはないと思いますよ。 超高速に回答するために質問を読んでいないだけでしょう。 https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%90%E3%83%BC%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0 > しかし、アヒルちゃんは、考えてからタイピングするように見えた後に、クワッと鳴くだけである。 このリンク先を読めばわかるように、「タイトルと本文を推敲して問題点を明確化し、自分でコードを書いてそれを説明すれば解決する問題は数多くある」とデバッグのお手伝いをしてくれているのです。
nyantama

2021/08/20 03:45

笑わせて頂きましたw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問