Значащие цифры в десятичном модуле

Когда вы вызываете асинхронный метод из вызывающего метода, этот метод также становится асинхронным. Попробуйте префикс async onComplete () {await this.retrieveData ()}

5
задан Jason Baker 29 September 2008 в 00:05
поделиться

6 ответов

Изменение десятичной рабочей точности к 2 цифрам не является хорошей идеей, если Вы абсолютно только не собираетесь выполнить единственную операцию.

Необходимо всегда выполнять вычисления в более высокой точности, чем уровень значения, и только вокруг конечного результата. При выполнении длинной последовательности вычислений и вокруг к числу значащих цифр на каждом шаге ошибки накопятся. Десятичный модуль не знает, является ли какая-либо конкретная операция один в длинной последовательности или конечном результате, таким образом, это предполагает, что не было должно вокруг больше, чем необходимого. Идеально это использовало бы бесконечную точность, но это слишком дорого, таким образом, разработчики Python согласились на 28 цифр.

После того как Вы прибыли в конечный результат, что Вы, вероятно, хотите, квантуйте:

>>> (Decimal('1.00') / Decimal('3.00')).quantize(Decimal("0.001"))
Decimal("0.333")

Необходимо отслеживать значение вручную. Если Вы хотите автоматическое отслеживание значения, необходимо использовать арифметику интервала. Существуют некоторые библиотеки, доступные для Python, включая pyinterval и mpmath (который поддерживает произвольную точность). Это также просто для реализации арифметики интервала с десятичной библиотекой, так как это поддерживает направленное округление.

Можно также хотеть считать Десятичную систему счисления FAQ: арифметика 'значения' десятичной системы счисления?

8
ответ дан 13 December 2019 в 05:45
поделиться

Десятичные числа не выбросят десятичные разряды как этот. Если Вы действительно хотите ограничить точность 2 d.p., затем пробуют

decimal.getcontext().prec=2

Править: Можно альтернативно звонить, квантуют () каждый раз, когда Вы умножаетесь или делитесь (дополнение, и вычитание сохранит эти 2 разности потенциалов).

3
ответ дан 13 December 2019 в 05:45
поделиться

Только из любопытства... необходимо использовать десятичный модуль? Почему не плавающая точка со значащие цифры, округляющиеся чисел, когда Вы готовы видеть их? Или Вы пытаетесь отслеживать значащие цифры вычисления (как то, когда необходимо сделать анализ ошибок результата, вычислив вычисленную ошибку как функцию неуверенности, которая вошла в вычисление)? Если Вы хотите округляющуюся функцию, которая округляется от левых числа вместо права, попробуйте:

def lround(x,leadingDigits=0): 
    """Return x either as 'print' would show it (the default) 
    or rounded to the specified digit as counted from the leftmost 
    non-zero digit of the number, e.g. lround(0.00326,2) --> 0.0033
    """ 
    assert leadingDigits>=0 
    if leadingDigits==0: 
            return float(str(x)) #just give it back like 'print' would give it
    return float('%.*e' % (int(leadingDigits),x)) #give it back as rounded by the %e format  

Числа будут выглядеть правильными, когда Вы распечатаете их или преобразовываете их в строки, но если Вы работаете при подсказке и явно не печатаете их, они могут выглядеть немного странными:

>>> lround(1./3.,2),str(lround(1./3.,2)),str(lround(1./3.,4))
(0.33000000000000002, '0.33', '0.3333')
1
ответ дан 13 December 2019 в 05:45
поделиться

Десятичные значения по умолчанию к 28 местам точности.
Единственный способ ограничить количество цифр, которые это возвращает, путем изменения точности.

0
ответ дан 13 December 2019 в 05:45
поделиться

Что случилось с плавающей точкой?

>>> "%8.2e"%  ( 1.0/3.0 )
'3.33e-01'

Это было разработано для вычислений научного стиля с ограниченным количеством значащих цифр.

0
ответ дан 13 December 2019 в 05:45
поделиться

Если я undertand Десятичное число правильно, "точность" является количеством цифр после десятичной точки в десятичной записи.

Вы, кажется, хотите что-то еще: число значащих цифр. Это - еще один, чем количество цифр после десятичной точки в экспоненциальном представлении.

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

0
ответ дан 13 December 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: