Как вычислить число e для произвольной точности в python3? [Дубликат]

Вы можете сделать окно, щелкнув, добавив стили WS_EX_LAYERED и WS_EX_TRANSPARENT в свои расширенные стили. Чтобы сделать его всегда сверху, установите его TopMost на true и сделайте его полупрозрачным, используйте подходящее значение Opacity:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Opacity = 0.5;
        this.TopMost = true;
    }
    [DllImport("user32.dll", SetLastError = true)]
    static extern int GetWindowLong(IntPtr hWnd, int nIndex);
    [DllImport("user32.dll")]
    static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
    const int GWL_EXSTYLE = -20;
    const int WS_EX_LAYERED = 0x80000;
    const int WS_EX_TRANSPARENT = 0x20;
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        var style = GetWindowLong(this.Handle, GWL_EXSTYLE);
        SetWindowLong(this.Handle,GWL_EXSTYLE , style | WS_EX_LAYERED | WS_EX_TRANSPARENT);
    }
}

Результат выборки

3
задан quantum 4 February 2012 в 22:13
поделиться

4 ответа

Да!

Я нашел этот код из . Генерирование цифр квадратного корня из 2

def z(contfrac, a=1, b=0, c=0, d=1):
    for x in contfrac:
        while a > 0 and b > 0 and c > 0 and d > 0:
            t = a // c
            t2 = b // d
            if not t == t2:
                break
            yield t
            a = (10 * (a - c*t))
            b = (10 * (b - d*t))
            # continue with same fraction, don't pull new x
        a, b = x*a+b, a
        c, d = x*c+d, c
    for digit in rdigits(a, c):
        yield digit

def rdigits(p, q):
    while p > 0:
        if p > q:
           d = p // q
           p = p - q * d
        else:
           d = (10 * p) // q
           p = 10 * p - q * d
        yield d

Я сделал генератор непрерывных дроби:

def e_cf_expansion():
    yield 1
    k = 0
    while True:
        yield k
        k += 2
        yield 1
        yield 1

и соединить их:

def e_dec():
    return z(e_cf_expansion())

Затем:

>>> gen = e_dec()
>>> e = [str(gen.next()) for i in xrange(1000)]
>>> e.insert(1, '.')
>>> print ''.join(e)
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035

Бонус: код для генерации постоянной дроби для sqrt (n), где n - положительное целое число, а sqrt (n) иррационально:

def sqrt_cf_expansion(S):
    """Generalized generator to compute continued
       fraction representation of sqrt(S)"""
    m = 0
    d = 1
    a = int(math.sqrt(S))
    a0 = a
    while True:
        yield a
        m = d*a-m
        d = (S-m**2)//d
        a = (a0+m)//d
11
ответ дан Community 24 August 2018 в 06:11
поделиться

Возможно, вы ищете что-то вроде этого:

>>> import math
>>> i = 1
>>> while i < 10:
...     print('e = {0:.{1}f}'.format(math.e, i))
...     i += 1
... 
e = 2.7
e = 2.72
e = 2.718
e = 2.7183
e = 2.71828
e = 2.718282
e = 2.7182818
e = 2.71828183
e = 2.718281828

Стандартная библиотека может дать вам math.e : математическую константу e = 2.718281 .. ., доступной точности .

1
ответ дан Rik Poggi 24 August 2018 в 06:11
поделиться

Если вы вызываете random.seed(n) из модуля random с известным n, результат будет одинаковым каждый раз:

>>> import random
>>> random.seed(4) # chosen by fair dice roll
>>> random.randint(0, 9)
2
>>> random.randint(0, 9)
1
>>> random.randint(0, 9)
3
>>> random.randint(0, 9)
1
>>> random.seed(4) # same seed as above
>>> random.randint(0, 9)
2
>>> random.randint(0, 9)
1
>>> random.randint(0, 9)
3
>>> random.randint(0, 9)
1

Если вам нужно передать состояние вокруг, используйте класс Random (несколько недокументированный):

>>> r = random.Random(4)
>>> r.randint(0, 9)
2
>>> r.randint(0, 9)
1

Из этого легко сделать генератор, который позволяет создавать несколько последовательностей которые не наступают друг на друга:

def random_digits(seed):
  r = random.Random(seed)
  while True:
    yield r.randint(0, 9)
5
ответ дан Thomas 24 August 2018 в 06:11
поделиться

Если вы хотите использовать pi вместо e, для pi существует алгоритм извлечения цифры . Неизвестно, существует ли такой алгоритм для e. Файл bbp_pi.py в sympy обеспечивает точную реализацию алгоритма.

-1
ответ дан wye.bee 24 August 2018 в 06:11
поделиться
Другие вопросы по тегам:

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