python学习笔记01:Python阶乘,计算机计算的局限性

今天大年初一,由于受肺炎的影响,在家闭关,没有出去拜年。学学习,看看电影,吃吃火锅,快乐就是那么简单。

话不多说,上笔记:

今天在看Python程序设计的时候看到一章叫做计算机算数的局限性

对于最新版的Python,计算一个很大的数时,计算机也不会计算困难,但是对于旧版的Python(用C++,java编写的Python)来说就会呈现计算机计算的局限性。

为什么呢?原因如下:

在计算机内部,int 以固定大小的二进制表示存储。特定计算机用来表示 int 的位数取决于 CPU 的设计。现在,典型的 PC 使用 32 或 64 位。

对于 32 位 CPU ,这意味着有 2 ^32 个可能的值。由于需要空出来一位表示符号,所以有2^31个可能的值。即:   -2^31~2^31-1个整数范围,(减去一个1是因为还需要表示0,是从0开始的).

如果Java程序依赖于32位 int 表示,它可以存储的最大数字是2147483647,注意,这个值(约 21 亿)在 12!(约 4.8 亿)和 13 !(约 62 亿)之间。这意味着Java程序可以很好地计算到 12 的阶乘,但是之后,表示“溢出”,结果是垃圾。

为什么现代 Python程序似乎能很好地用大整数计算?

幸运的是,Python 对于大的、精确的值有一个更好的解决方案.Python 的 int 不是固定的大小,而是扩展到适应任何值。唯一的限制是计算机可用的内存量。当很小时,Python就用计算机的底层 int 表示和操作。当值变大时,Python 会自动转换为使用更多位的表示。当然,为了对更大的数字执行操作, Python 必须将 操作分解计算机硬件能够处理的更小的单元,类似于你手工计算长除法的方式。这些操作不会那么有效(它们需要更多的步骤),但是它们允许 Python 的 int 增长到任意大小。这就是为什么我们的简单阶乘程序可以计算一些大的结果。这是一个非常酷的 Python 特性。

猜你喜欢

转载自www.cnblogs.com/zhaoxiansheng666/p/12233226.html