どうやったらいいんですか?
罵ogk (Kは1からN)なんて計算できませんよね??
スターリングの公式は
あくまで、およその値ですし・・・。
3 :
132人目の素数さん:01/09/10 17:10
>3
桁数と0の数は違うと思われ。
やっぱり罵og(k)(対数の底は10)を計算するのが良いだろう。
計算に使うlog(k)の数値の有効桁数から計算誤差を見積もることができる。
計算結果の最大値と最小値の整数部分が同じになればよい。
分かりやすく書くと、
数列min(k)とmax(k)で
min(k)<log(k)<max(k)
であるとき、
芭in(k) と 芭ax(k)
の整数部分が同じであれば、
10^芭in(k) と 10^芭ax(k)
の桁数も同じで、
10^罵og(k)の桁数もそれになる。
ということだ。
そうなるために必要なlog(k)の有効桁数は(恐らく)数桁で良いと思う。
>桁数と0の数は違うと思われ
勘違いしてました。すみません
>>1 >罵ogk (Kは1からN)なんて計算できませんよね??
(5と同じ発想かもしれんが) 納K=1,1000]logkと納K=2,1001]logkの和の1/2ぐらいが∫[1,1000]log(x)dxであるとイメージする。
2つの狽ェ階段状に並んだ1000枚の短冊群、∫がそれをならしたもの・・・。
でもlogの曲線の膨らんだ部分『{log(k)+log(k+1)}/2と∫[k,k+1]log(x)dxとの差』が少し出る。
その誤差を厳密に修正したのが、スターリングさんで、
2さんの書いたスターリングの公式 m! 〜 (2π^1/2)*(m^(m+1/2))*(e^(-m))
※「〜」は(mが大きくなると近似していく意味のつもり)
で、両辺の常用対数を計算すると
m=100 で、158桁
m=1000 で、2568桁
ちなみに公式の「近似の誤差」がどれほどか確かめてみたら、桁数計算で使う限り、
1!の場合はさすがに違っているが、早くも2!以上で一致しました。
>>7さんをはじめ
皆さんありがとうございました。
何とか積分に持ち込めないかなぁと考えていたんですけど
こういう風な感じにすれば良かったんですね。
1000!
= 40238726007709377354370243392300398571937486421071463254379991042993851239862902
05920442084869694048004799886101971960586316668729948085589013238296699445909974
24504087073759918823627727188732519779505950995276120874975462497043601418278094
64649629105639388743788648733711918104582578364784997701247663288983595573543251
31853239584630755574091142624174743493475534286465766116677973966688202912073791
43853719588249808126867838374559731746136085379534524221586593201928090878297308
43139284440328123155861103697680135730421616874760967587134831202547858932076716
91324484262361314125087802080002616831510273418279777047846358681701643650241536
91398281264810213092761244896359928705114964975419909342221566832572080821333186
11681155361583654698404670897560290095053761647584772842188967964624494516076535
34081989013854424879849599533191017233555566021394503997362807501378376153071277
61926849034352625200015888535147331611702103968175921510907788019393178114194545
25722386554146106289218796022383897147608850627686296714667469756291123408243920
816015378088989396451826324367161676217916890977991190375403127
46222899880051954444142820121873617459926429565817466283029555702990243241531816
17210465832036786906117260158783520751516284225540265170483304226143974286933061
69089796848259012545832716822645806652676995865268227280707578139185817888965220
81643483448259932660433676601769996128318607883861502794659551311565520360939881
80612138558600301435694527224206344631797460594682573103790084024432438465657245
01440282188525247093519062092902313649327349756551395872055965422874977401141334
69627154228458623773875382304838656889764619273838149001407673104466402598994902
22221765904339901886018566526485061799702356193897017860040811889729918311021171
22984590164192106888438712185564612496079872290851929681937238864261483965738229
11231250241866493531439701374285319266498753372189406942814341185201580141233448
28015051399694290153483077644569099073152433278288269864602789864321139083506217
09500259738986355427719674282224875758676575234422020757363056949882508796892816
275384886339690995982628095612145099487170124451646126037902930
91208890869420285106401821543994571568059418727489980942547421735824010636774045
95741785160829230135358081840096996372524230560855903700624271243416909004153690
10593398383577793941097002775347200000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000
age
12 :
132人目の素数さん:01/10/15 23:54
13 :
132人目の素数さん:01/10/16 00:13
激しくワラタ
と。
14 :
132人目の素数さん:01/10/16 00:21
15 :
132人目の素数さん:01/10/16 00:30
>>9 がいいとは言えんよ。
これ見て何桁かすぐに言えるかい?
10000!だったらどうする。
(10^n)!だったらどうする。
問題にしてるのはそういうことだろ。
それが数学てもんだ。
16 :
小学校6年生天才児:01/10/16 00:32
そんなお前に激しくひいた
と。
17 :
132人目の素数さん:01/10/16 00:34
19 :
132人目の素数さん:01/10/16 00:50
>>18 ネタか?
例えば、1581の常用対数は3.199だ。
それをプラス1して整数部をとれば、4になる。
実際に4桁だろう?
20 :
132人目の素数さん:01/10/16 00:52
21 :
132人目の素数さん:01/10/16 00:58
Javaで
BigInteger i;
i = fact(100);
System.out.println("100!の桁数は" + log(i)+1);
もちろんfact()は定義済みとして考えてね。
24 :
132人目の素数さん:01/10/16 15:52
age
25 :
132人目の素数さん:01/10/16 19:38
>>21 Java って全く知らないのだけど、log の引数は C の double のようなものに変換
されないの? いいなあ。
scheme だと factorial は教科書の末尾再帰のところに書いてあるから流用すると
(+ 1 (floor (log (factorial 1000))))
は浮動小数の桁あふれでアウトのやつばっかり。十進の文字数を数える
(string-length (number->string (factorial 1000)))
は通るやつが多い。
とはいえ、ベルヌーイ数を使ってガンマ関数の対数を近似計算する方が、楽だと思う。
26 :
132人目の素数さん:01/10/16 21:57
まあ、やっぱり25の言うように、真面目に話せば、スターリングの一般的に言われている近似式は
n!/(n^n・e^(-n)・√(2πn))=1だけど、正確には
n!/(n^n・e^(-n)・√(2πn))=1+1/12n+1/288n^2-139/51840n^3-…
で、ベルヌーイ数を使った級数で表されるから、それでやればいいんじゃない?
Javaだと”1+1=”+1+1は”1+1=11”になると思う。
28 :
132人目の素数さん:01/10/17 01:40
>>25 >>27 >>21が使っている関数は標準関数ではない。
クラス内で自作するもの。
恐らく BigInteger fact(BigInteger n);
int log(BigInteger x);
という仕様だと思う。
ちなみに標準関数は「Math.」が頭につく。
>>28 そんな事を言っているんじゃなくて
>System.out.println("100!の桁数は" + log(i)+1);
がおかしいと言っている。
100!の桁数は1571
は大きすぎ。
>恐らく BigInteger fact(BigInteger n);
だと
>i = fact(100);
はエラー。
31 :
132人目の素数さん:01/10/17 15:38
>>29 >>30 文法なんてどうでもいいジャン・・・(汗’
何でそういう揚げ足ばっかりとる奴が現れるんだろうね。
そんなに力をひけらかしたいのかい?
ハァ、バカばっかり・・!
32 :
132人目の素数さん:01/10/17 16:47
33 :
132人目の素数さん:01/10/17 20:22
mathematicaにて
i = 1000!;
N[Log[10, i]]
終了
34 :
132人目の素数さん:01/10/17 20:23
ちなみに結果は
2567.6
よって1000!は2568ケタということでよろしいですか?
35 :
132人目の素数さん:01/10/18 01:16
っていうかさ、結果が出てから言うのもなんなんだけど
Σlog(n) はダメなんかい?
こっちの方が効率いいぞ。
int i;
double keta;
for(i=1;i<=1000;i++){
keta += log10(i);
}
↑C言語のプログラム
ketaを初期化するの忘れた・・・
double keta = 0.0;
にしてくれ
>>31 そうすると100!は1571桁でいいと?
38 :
132人目の素数さん:01/10/18 01:35
39 :
132人目の素数さん:01/10/18 01:48
>>35 丸め誤差で多少狂うけど、そっちの方が遥かによいと思われ。
>>29=37はくだらんこと言ってないで、対数の性質でも勉強しる(w
>>29=37
文句言ってるなら、お前が作って貼り付けろや。
他人に頼ってばかり&粘着カコワルイ
どーせお前はマザコンタイプだろ?
一生ママンの乳でも吸ってな!(藁
100!の桁数を知りたい。
javaで計算。
100!の桁数は1571と出る。
100!は1571桁。
>>41 ホントにしつけぇな(w
文字列演算で1が付加されるってんだろ?
ホントは158桁ぐらいだしな。
いいからお前が作って貼り付けろって!!バーカ
>>40 System.out.println("100!の桁数は" + (log(i)+1));
でいいんでしょ。
だからもう
>>35のでいいじゃん・・・・
int i;
double keta=0.0;
for(i=1;i<=1000;i++){
keta += log10(i);
}
↑C言語のプログラム
っていうか、みなさん
log n! = Σlog n
って気付かないんでしょうか(汗’’
何でBigIntegerに拘るのか全然分かりません。
そういう強引なのもいいですが、頭を柔らかくするのも大事ですよ。
>>45の言うとおり。
>>29=37=41=43みたいなバカは数学をやめた方がいい。
そんな固い頭で数学をやるのは無理だ。
どうせ大成しないと思われ。
そんなことでは就職にも苦しんで人生の落伍者になるのが見えてるな。
>>46 まぁまぁ、バカに何を言ってもムダよ。
付け焼き刃のJavaで優越感に浸ってるだけなんだからさ(w
>>45 そんなことは分かっているけど21のように
javaで計算するなら43のようにしないと
正しい結果が出ないといっているんです。
>>48 だったら初めから正しいコードを貼り付ければいいじゃねーか・・
お前はごちゃごちゃご託並べてくだらんこと抜かしてるから嫌われてるの。
じゃなかったらとっくに解決してただろ。
やらなかったということは、分からなかったのと同じ。
もしくは単なる煽り荒らしだな。
>>48 例えば君が10年前にフェルマー予想を解決していても
発表しなかったら君の功績にはならないでしょう。
それでもできたと言い張ったら今井と同じようなモンだろ。
みんなはそういうことが言いたいんだよ。
javaをしっているなら27でどこが間違っているか分かると思うけど。
粘着しつけぇな。
よくコーヒー豆の話題でそんなに盛り上がれるね。
プププ
プププ+プププ=ププププププ
57 :
132人目の素数さん:01/10/21 14:41
>>56は頭おかしいのか?
なんで言語仕様にそんなに固執するんだ?
58 :
132人目の素数さん:01/12/01 21:00
age
漸近展開だから項を取りすぎると発散するのでは?
漸近展開の式は、俗に、加える項の大きさが減少から増大に転じるところで
打ち切ればもっともよい近似を与えるなどといわれているけど、
それって何らかの数学的証明あるいは基礎があるのかな?
61 :
132人目の素数さん:02/01/16 05:21
スターリング age
31や42は
>System.out.println("100!の桁数は" + (log(i)+1));
が分からなかったのか。