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选项。谢谢! –