Python, как долго может быть десятичная точка? - PullRequest
0 голосов
/ 14 мая 2018

Я сделал пи калькулятор. Но он просто исправляет первые 7 десятичных знаков и начинает возвращать те же результаты. Судя по всему, мои значения с плавающей запятой увеличиваются, потому что я использую ограничение. Но есть ли предел для десятичных чисел в python? Я читаю некоторые документы, но есть числа даже с 100 десятичными точками, но я могу просто добраться до 11.

Мой код:

import math
import decimal
import datetime

sqrtt=1.
sumn=0.
tryc=0
outerrepeat=1000000000
while outerrepeat>0:
    tryc+=1
    repeat=10000000
    a=datetime.datetime.now()
    print "\n>>>Processing...\n"
    while repeat>0:

        sumn+=1/(sqrtt**2)
        sqrtt+=1
        repeat-=1
    b=datetime.datetime.now()
    print ">>>Process complete.\n"
    print ">>>Calculate time: "+str(b-a) + " Try-" + str(tryc) +" "+      str(math.sqrt(sumn*6)) + "\n"
    outerrepeat-=1


print "\nThis is all I can do."

Может помочь: работает на IDLE. Расчет сделан по базовой задаче. Всегда застревает на 3.14159264498. Также никогда не получает дальше, чем 11 десятичных знаков, но иногда становится ниже. Должен сказать, что мой лимит (sqrtt) достигает 8-й степени 10 (возможно, ниже, но выше 7-й степени 10). Спасибо.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Python использует 64-битные числа с плавающей запятой, которые имеют от 15 до 17 десятичных цифр точности.

Доказательство можно найти здесь , где мы можем увидеть питона floatзначение сохраняется в виде двойного C (который почти всегда является 64-битным числом с плавающей запятой).

typedef struct {
    PyObject_HEAD
    double ob_fval;  // this is the actual float value
} PyFloatObject;

Вы можете использовать объект decimal.Decimal для бесконечной точности.

Пример с вычислением e

import decimal
import math

decimal.getcontext().prec = 100  # set the precision, can be as large as you like

e = decimal.Decimal(0)
next_e = decimal.Decimal('NaN')  # init as not a number
i = 0

while e != next_e:
    e, next_e = next_e, e + decimal.Decimal(1) / math.factorial(i)
    i += 1


e #--> Decimal('2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166428')
0 голосов
/ 14 мая 2018

Также очень полезным будет этот урок. Арифметика с плавающей запятой: проблемы и ограничения

Точность чисел с плавающей точкой питона ограничена 17 цифрами.«На типичной машине, на которой работает Python, для плавающего Python есть 53 бита точности».Это не только питон, это стандарт.Так что полезно быть знакомым.

0 голосов
/ 14 мая 2018

В типичной реализации Python значения с плавающей точкой имеют 64 бита с точностью 53 бита. Это 15-17 значащих десятичных цифр.

https://en.wikipedia.org/wiki/Double-precision_floating-point_format

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...