Python,无限花车?

时间:2014-12-26 15:07:09

标签: python function decimal

我想做什么:

悖论:假设彼得帕克跑来赶公共汽车。要达到它,他首先需要到达那里。在此之前,他需要在四分之一,八分之一之前得到四分之一的路程;在第八,第十六之前;等等。由于距离可以无限减半,他会试图完成无数的任务......这将是一个逻辑上不可能的事情!

我试图用Python解决这个悖论

我有一些问题: 如何获得一个对小数没有限制的数字? Python限制了小数的数量,我认为12,如何使这个数字无限?

一般来说,没有办法让浮点小数无限,我能得到的最接近的是

from decimal import Decimal

这是要求用户输入数字的正确方法吗? 代码已修改

from decimal import Decimal
def infinite_loop():
    x = 0;
    number = Decimal(raw_input())
    while x != number:
        x = x + number
        number = number/2
        print x
infinite_loop()

2 个答案:

答案 0 :(得分:2)

你问的是不可能的。没有"无限精度"有限计算系统的现实世界中的浮点值。如果有,单个浮点值可以消耗所有系统的资源。 pi * d?哎呀! pi是无限的。有系统!

但是,您可以执行任意精度十进制值。它们仍然是有限的,但你可以选择你想要多少精度(并且愿意支付)。 E.g:

>>> from decimal import Decimal
>>> x = Decimal('1.' + '0' * 200)
>>> x
Decimal('1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')

现在你有200位数的精度。不够?去400. 800.但是你喜不喜欢。只要这是一个有限的,实用的价值。

答案 1 :(得分:1)

如果你想要“无限”精度(例如,你的内存可以扩展的十进制数),要么使用Python的内置模块Decimal,要么进行更繁重的计算,mpmath:< / p>

import mpmath as mp
mp.mp.dps = 100
print mp.sqrt(mp.mpf(2))

>> 1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573