1
我想我已經遇到了一些類型的awk溢出,而我不知道怎麼去解決它,見下圖:awk中的整數溢出
BEGIN {
print 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
print 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
}
這是輸出:
25852016738884978212864
1124000727777607680000
雖然第二個是正確的,第一個不是,23!等於25852016738884976640000.
有沒有辦法得到這個,也許有些變種?
要精確我使用GAWK:使用
GNU Awk 4.0.1
'awk'做不要假裝提供任意的精確算術。您可以通過用浮點版本替換某些數字來避開它,但將'22'設置爲'22.0'實際上並未達到預期的效果。使用「無限精度」算法的工具; 'bc'就是這樣一個工具,Python是另一個工具。 –
如果您的'awk'版本支持[Arbitrary Precision Arithmetic](http://www.gnu.org/software/gawk/manual/gawk.html#Arbitrary-Precision-Arithmetic),即使用'gmp',你可以提供'-M'選項來獲得想要的結果。 – devnull
我不得不用mpfr的標誌重新編譯gawk,它允許我使用-M選項。謝謝! –