用正常人的方式在 Go 裡面做大數運算

Posted by TJ Wei on 星期六, 4月 27, 2013 with No comments
Go 裡面沒有 Operator Overloading 的功能,所以雖然內建 Big Integer,但長一點的計算會變得很醜,比方說你要算個 (5*2+3*6)%10 好了,樣子就會有點像是
a := big.NewInt(5)
a.Mul(a, big.NewInt(2))
b := big.NewInt(3)
b.Mul(a, big.NewInt(6))
a.Add(a, b)
a.Rem(a, big.NewInt(10))
更複雜一點的算式就更難懂了。其他像是矩陣、分數、向量、多項式或者任何自訂的計算 type,下場都一樣悲慘。
底下是利用內建的 parser,壤我們可以用正常人的語言在 Go 裡面計算。
雖然有人會說什麼失去了編譯時期靜態檢查的特性,但真要比除錯,寫個 E("(5*2+3*6)%10") 絕對比上面一串外星文出錯的機會比較小一點。
可以到 http://play.golang.org/p/Toqkc4XY2J玩玩看。
Categories: