[問題] N!怎麼算

看板Fortran作者 (葡萄柚你這頑固的東西~)時間15年前 (2009/02/10 16:31), 編輯推噓5(504)
留言9則, 4人參與, 最新討論串1/2 (看更多)
請問 n!怎麼計算。 當n很大時,程式該怎麼寫,數值才不會太大變成NaN的狀況? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.194.131.21

02/10 18:11, , 1F
用Stirling 公式去近似就好了
02/10 18:11, 1F

02/10 19:47, , 2F
用double浮點數可以支援大一點 再上去就要用陣列做大數
02/10 19:47, 2F

02/10 21:36, , 3F
感謝各位提供的方法,目前試了stirling跟double的方式
02/10 21:36, 3F

02/10 21:38, , 4F
均無法做出400!。其實想算的是combin-->n!/m!(n-m)!
02/10 21:38, 4F

02/10 23:30, , 5F
那就求 n*(n-1)*. . . *(n-m+1) 就是了。應該會少很多位數吧?
02/10 23:30, 5F

02/10 23:35, , 6F
oops,忘了除以 (n-m)! 了
02/10 23:35, 6F

02/10 23:38, , 7F
建議方法:[n/(n-m)]*[(n-1)/(n-m+1)]*[(n-2)/(n-m+2)]. . .
02/10 23:38, 7F

02/10 23:40, , 8F
看 (n-m) 和 m 那個大,再繼續乘以或除以剩下沒配對到的序列。
02/10 23:40, 8F

02/10 23:51, , 9F
剛剛又發現不會有沒配對到的序列了。耍笨真抱歉。
02/10 23:51, 9F
文章代碼(AID): #19aJjsVo (Fortran)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
文章代碼(AID): #19aJjsVo (Fortran)