3

我知道 python 能够处理任意大整数,那么为什么在使用科学记数法时它不给我一个呢?为什么 1e23 与 10**23 有什么不同?

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> for x in range(30):
...   x1 = eval('long(1e{})'.format(x))
...   x2 = eval('long(1{})'.format('0' * x))
...   print x1, 'OK' if x1 == x2 else 'YUCK!'
... 
1 OK
10 OK
100 OK
1000 OK
10000 OK
100000 OK
1000000 OK
10000000 OK
100000000 OK
1000000000 OK
10000000000 OK
100000000000 OK
1000000000000 OK
10000000000000 OK
100000000000000 OK
1000000000000000 OK
10000000000000000 OK
100000000000000000 OK
1000000000000000000 OK
10000000000000000000 OK
100000000000000000000 OK
1000000000000000000000 OK
10000000000000000000000 OK
99999999999999991611392 YUCK!
999999999999999983222784 YUCK!
10000000000000000905969664 YUCK!
100000000000000004764729344 YUCK!
1000000000000000013287555072 YUCK!
9999999999999999583119736832 YUCK!
99999999999999991433150857216 YUCK!
4

2 回答 2

5

1e23被解释为浮点数,而10**23整数是整数幂(即整数)

于 2012-10-22T02:52:17.353 回答
3

Python 浮点类型使用系统架构原生的数字进行计算 - 通常是此处定义的 64 位浮点: http : //www.ee.unb.ca/tervo/ee6373/IEEE64.htm 我不确定它是否可以构建默认情况下使用其他浮点数据类型 - 但我知道如果运行 Python 的体系结构在 F>p> 数字处理方面具有特殊性,那么这些将出现在 Python 中 - 因此,在 x86 硬件中运行的 Python 程序可能会有所不同在 PPC、ARM 或其他 CPU 中运行的那些。

但是,如果您想在 Python 中使用任意精度的十进制数,则可以使用 Decimal 模块。截至最近发布的 Python 3.3,十进制数的速度与本机浮点数的速度相当(在 Python 程序中 - 能够使用诸如 SIMD 指令之类的 FP 加速的本机代码会快得多)

于 2012-10-22T03:00:06.697 回答