2011-06-17 13 views
-1

在python中序列化长数的最佳方法是什么?在python中序列化长数

我在想泡菜,但它仍然会返回“缩短”版本。我明明写的所有的数字..

longNum = math.pow(2,1000) 


f = open("file", "w") 
pickle.dump(str(longNum), f) 
f.close() 

f = open("file","r") 
longNum = pickle.load(f) 
f.close() 

print longNum 

1.07150860719e + 301

+0

不相关,但你知道你可以写'2 ** 1000'而不是'math.pow(2,1000)',对不对? – 2011-06-17 01:37:19

+3

math.pow返回一个浮点数。在对它进行序列化之前,精度已经丢失 – 2011-06-17 01:39:19

+0

对不起,是的,问题来自数学模块失去精度,谢谢! – 2011-06-17 01:41:07

回答

7

如果您启动解释器,则可以快速查看问题。

>>> math.pow(2,1000) 
1.0715086071862673e+301 

>>> 2**1000 
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L 

math.pow正在返回一个浮点数,根据定义,浮点数并不保留“所有数字”。通过使用长整数运算符**,您的结果很长,这就是您要查找的结果。

0

我觉得这其实是打印的格式,而不是序列化的问题。阅读this页面,看看是否是这样。

另外,不要考虑gnibbler对这个问题的评论。我认为这碰到了头部。