用常见的Fibonacci数列来说,第一项是0,第二项是1,后面的每一项都是它前两项之和。
0, 1, 1, 2, 3, 5, 8, 13......
这个数列的增长实际上是很快的,当超出计算机变量所能表现的类型的上限后,结果就变为了负值,发生了溢出。
通过一段代码实验Fibonacci数列溢出
这已经使用了最大的数字的数据类型long long,如果还有更大的数字怎么办?我们满手油污的去操作内存分配?
幸好有GNU项目,里面的一个名为gmp(GNU Mutiple Precision Arithmeic Library)的库为我们解决了这一棘手的问题。这个库提供了很多基础的内存分配特性。
修改后的代码:
该库在数值和字符串中做了很好的处理,使你能获得一个真正没有溢出的数值,更符合客观世界的概念。
参考文献:
- Full Circle #24
- http://gmplib.org/manual/
没有评论:
发表评论