2014-12-26 4 views
-2

То, что я хотел сделать:Python, бесконечные поплавки?

Парадокс: Пусть Питер Паркер был запущен, чтобы сесть на автобус. Чтобы добраться до него, ему сначала нужно было добраться на полпути. До этого ему нужно было пройти четверть пути ... до четверти, восьмого; до восьмого, шестнадцатого; и так далее. Поскольку расстояние может быть уменьшено вдвое бесконечно, он будет пытаться выполнить бесконечное количество задач ... КОТОРЫЙ БУДЕТ ЛОГИЧЕСКИ НЕВОЗМОЖНО!

Я пытался разрешить этот парадокс, используя Python

У меня есть несколько вопросов: Как я могу получить номер, не имеют каких-либо ограничений с десятичными знаками? Python ограничивает числа десятичных знаков, я думаю, до 12, как сделать это число бесконечным?

Aparrently нет никакого способа, чтобы сделать поплавок DECIMALS бесконечен, ближайшим я мог бы получить использовал этот

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() 
+0

может помочь : https://docs.python.org/2/tutorial/floatingpoint.html –

+4

@Juanvulcano: Что вы пытаетесь сделать? Если вы все захотите, чтобы получить номер от пользователя, достаточно простого 'number = float (raw_input())' было бы достаточно. – Rufflewind

+0

Также почему он принимает переменную 'lol', если вы никогда не используете эту переменную? – CyanogenCX

ответ

2

Что вы спрашиваете невозможно. В реальном мире конечных вычислительных систем нет значений бесконечной точности с плавающей запятой. Если бы это было так, одно значение с плавающей запятой могло бы потреблять все ресурсы системы. pi * d? По электронной почте Ой !! pi бесконечен. Там идет система!

Что вы можете сделать, однако, получить произвольно прецизионные десятичные значения. Они все еще ограничены, но вы можете выбрать, какую точность вы хотите (и готовы платить за). Например:

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

Теперь у вас есть 200 цифр точности. Недостаточно? Go 400. 800. Сколько вам нравится. Пока это конечная, практическая ценность.

+0

Спасибо, это был именно тот вопрос, на который я хотел получить ответ. – Juanvulcano

+1

Просто будьте осторожны с такими понятиями, как «точность», «значащие цифры» и сколько информации вы действительно должны представлять. [Документы] (https://docs.python.org/2/library/decimal.html) объясняют, как использовать 'Decimal'. Отрадно думать, что вы можете представлять ценности с гиперточкой, но большинство источников данных недостаточно точны, чтобы действительно им это нужно, и основная часть научно-технических вычислений может быть выполнена в (по общему признанию, неточном) сфере плавания с двойной точностью точка. –

1

Если вы хотите «бесконечной» точность (например, десятичное число, которое будет продлено, насколько у вас есть памяти), либо использовать встроенный модуль Питона Decimal или для более тяжелых вычислений, mpmath:

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

>> 1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573 
Смежные вопросы