Re: [問題] Mathematica bug?

看板Mathematica作者 (養花種魚數月亮賞星星)時間7年前 (2016/08/07 00:15), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《biglion ( )》之銘言: : 最近在解 Project Euler 寫了一段code : 出現了一些error message : 個人覺得這可能是Mathematica的bug : fexp[{n_Integer}] = 1; : fexp[exp_List] := fexp[exp] = Multinomial @@ exp; : f[i_] := fexp[Sort[FactorInteger[i]][[All, 2]]]; : code蠻單純的,就不解釋了 : 執行 : Sum[f[i], {i, 1000000}] // AbsoluteTiming : 幾秒鐘後就計算完畢 : 但如果執行 : Sum[f[i], {i, 1000001}] // AbsoluteTiming : 開始出現錯誤訊息 : FactorInteger::exact: Argument i in FactorInteger[i] is not an exact number. : Part::partd: "Part specification FactorInteger[i][[All,2]] is longer than : depth of object." : 但事實上 單獨執行f[1000001]是正常的 : 神奇的是 如果使用平行運算又沒問題 : ParallelSum[f[i], {i, 1000001}] // AbsoluteTiming : 而且答案在Project Euler上是正確的 : 所以code應該是沒錯 : 使用Mathematica 10.2 跟 10.3 都是如此 : 想請教各位高手的是: : 1) 這究竟是否是Bug,或其實是coding上有問題 : 2) 如果真是Bug,要怎麼避開這個Bug : 3) 當我丟平行運算的時候,各thread並無法共用記憶體,導致DP無法真正發揮效用 : 應該要如何設定才能夠讓各thread可以共用呢? Clear[fexp, f, iter, fvalue]; iter = 0; fvalue = 0; Dynamic[{iter, fvalue}] fexp[exp_List] := Multinomial @@ exp; f[i_] := fexp[FactorInteger[i][[All, 2]]]; AbsoluteTiming@Sum[iter = i; fvalue = f[i]; f[i], {i, 1000001}] AbsoluteTiming@ParallelSum[f[i], {i, 1000001}] -- 我打研究室走過 那獨坐電腦前的容顏如苦瓜的糾結 靈感不來 長壽的煙霧不散 研究室如小小的寂寞的城 恰如商管的電梯向晚 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.252.81 ※ 文章網址: https://www.ptt.cc/bbs/Mathematica/M.1470500137.A.496.html

08/07 09:23, , 1F
抱歉,我沒說清楚 我想保留dynamic programming的部分
08/07 09:23, 1F

08/07 09:29, , 2F
因為原始程式其實更複雜 不希望每個iteration重複運算
08/07 09:29, 2F
文章代碼(AID): #1NfWqfIM (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1NfWqfIM (Mathematica)