みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
ただいまFM勉強中です。
random関数では、0~1までの数字を0と1含まずに返すようですが
指定範囲内の整数をランダムに表示させるにはどうすればいいのでしょうか?
たとえばフィールドを2個つくり
F1が 5 F2が 100 と指定した場合に
5~100まで(もしくは6~99まで)を返すようにするにはどうするか?と思いまして。
int(random*(F2-F1))で、それっぽく答えがかえって来ているような気もするのですが・・・
Let([
#min=F1;
#max=F2;
#rdm=Int(Random*#max+1);
#rdm=
Case(
#rdm<#min; Min(#rdm+#min; #max);
#rdm
)
];
#rdm
)
Offline
int(random*(F2-F1+1))+F1
5から100までなら100-5+1=96種類から選ぶことになる。ベースが0なので最小値を加算。
int(random*(F2-F1+1))+F1
5から100までなら100-5+1=96種類から選ぶことになる。ベースが0なので最小値を加算。
はじめ同様な式を考えましたが、F1=5でF2=6のときに破綻するので、少し複雑な式に...。^^;;
Offline
ありがとうございます。
エラー処理までは考えていませんでした。だめですね・・・
いま教えていただいた式をためしているのですが
ヘルプを見てもrandomの仕様が詳しく出ていなくてこまっています。
0と1を除いて、どの程度の桁数まで出るのかは決まっているんでしょうか?
小数点以下17桁だったり18桁だったりするようです
Random関数は0と1の間の数を0を含めて返しますが、1は含みません。
また小数点以下18桁ですが、末尾の0は省略されて非表示となるので、18桁を最大にそれ以下の数字が表示されるようです。
Offline
calcer さんので、5と6でも問題ないです。
問題あるとしたら、F1>F2の場合。
calcerさんの考え方でいいですよね。
Hiroさんの式は、
大きい方に偏った値を返します。
ランダムとは言えませんよ。
例えば、
F1とF2を
9,10
の様に極端な設定をするとお分かりになるかと。
Offline
御意!
傾向については、F1とF2の値により色々と変化しますし、また、
サンプル数によりRandom関数自体にも傾向があるような。
なので、偏りは想定の上で、いけるかなあ?と。
しかし、問題は、わざわざ偏りを発生させて補正する、誤った考え方ですネ。
Last edited by Hiro (2016-05-13 13:41:59)
Offline
> サンプル数によりRandom関数自体にも傾向があるような。
http://filemaker-kou.seesaa.net/article/150205137.html
過去に分布を調べた限り、明確な偏りはありませんでした。
この記事以降も1次元のプロットなど幾つかの方法で確認しましたが、
少なくともVer.10の時点では明確な偏りは無さそうでした。
サンプル数に比例して、多ければ多いほど分散平準化していくのは理解します。(記事は十分な百万件でテスト、が多少の斑模様が未だ残る)
しかしサンプル数が少ない場合、意図では無くとも偶然の結果として、斑が生ずる現象は原理的に致し方ないことかと、
Offline
Pages: 1
[ Generated in 0.012 seconds, 9 queries executed - Memory usage: 520.61 KiB (Peak: 525.52 KiB) ]