[問題] Mathematica bug?

看板Mathematica作者 ( )時間8年前 (2016/08/06 23:24), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串1/2 (看更多)
最近在解 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可以共用呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.212.238 ※ 文章網址: https://www.ptt.cc/bbs/Mathematica/M.1470497040.A.33D.html

08/08 19:54, , 1F
只要指定ff[i_Integer]應該就好了,沒有指定的話
08/08 19:54, 1F

08/08 19:55, , 2F
Mathematica會自作聰明去optimize,很容易出現bug
08/08 19:55, 2F

08/08 19:58, , 3F
改了後速度快很多..應該是f:=f=...被optimize掉了@@
08/08 19:58, 3F

08/08 20:07, , 4F
重跑發現只是cache Clear沒用,因為有if實際上是比較慢
08/08 20:07, 4F

08/17 23:18, , 5F
感謝樓上,原來只要指定好型態就OK了
08/17 23:18, 5F

08/17 23:20, , 6F
另外感謝chungyuandye有提供另一個方法避開
08/17 23:20, 6F

08/17 23:20, , 7F
使用 Sum[f[i], {i, 1000001}, Method -> "Procedural"]
08/17 23:20, 7F
文章代碼(AID): #1NfW4GCz (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1NfW4GCz (Mathematica)