Как в php вывести например с 30 по 40 число от числа Пи?

Ilya74
На сайте с 12.06.2008
Offline
354
#41
SeVlad #:
Из постоянной.

Я имел в виду, что в масштабах PHP это будет переменная вида $pi = '........'. Константы в PHP использовать для ТС ещё слишком сложно))

⚡️ Хостинг и VPS в Москве, Новосибирске, Нидерландах, США ( https://x5x.host )
SeVlad
На сайте с 03.11.2008
Offline
1609
#42
Ilya74 #:
Я имел в виду, что в масштабах PHP это будет переменная вида $pi = '

А я имел ввиду, что php знает о pi и не нужно даже таких промежуточных переменных.

Хотя в принципе да, для универсальности лучше запихнуть в переменную.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
W1
На сайте с 22.01.2021
Offline
289
#43
SeVlad #:

А я имел ввиду, что php знает о pi и не нужно даже таких промежуточных переменных.

Хотя в принципе да, для универсальности лучше запихнуть в переменную.

В строковую переменную или константу, я выше написал. То, что PHP знает о пи, тут ничем не поможет. Да и ни к чему здесь это.
Другое дело, что ТС делает что-то не то и не так. У меня большое подозрение, что таким образом он пытается "смастерить" генератор случайных чисел.

Мой форум - https://webinfo.guru –Там я всегда на связи
.
На сайте с 18.03.2023
Offline
0
#44
Интересно, сколько будет создаваться переменная весом в мегабайт  _https://jsfiddle.net/wqepnLxr/
A1
На сайте с 23.11.2011
Offline
131
#45
.andrey. #:
Интересно, сколько будет создаваться переменная весом в мегабайт 

Долго. И число PI в миллион знаков тоже будет создаваться долго. И подстрока тоже будет долго находиться. Но автор не ищет легких путей.

S3
На сайте с 29.03.2012
Offline
302
#46
alexx10 #:

Долго. И число PI в миллион знаков тоже будет создаваться долго. И подстрока тоже будет долго находиться. Но автор не ищет легких путей.

Используя алгоритм Чудновского на питоне - примерно 4,5 секунд. Не думаю что на пхп дольше

from decimal import Decimal
import time

def chudnovsky2(n):
    pi = Decimal(13591409)
    ak = Decimal(1)
    k = 1
    while k < n:
        ak *= -Decimal((6 * k - 5) * (2 * k - 1) * (6 * k - 1)) / Decimal(k * k * k * 26680 * 640320 * 640320)

        val = ak * (13591409 + 545140134 * k)

        d = Decimal((6 * k - 5) * (2 * k - 1) * (6 * k - 1)) / Decimal(k * k * k * 26680 * 640320 * 640320)

        pi += val
        k += 1
    pi = pi * Decimal(10005).sqrt() / 4270934400
    pi = pi ** (-1)
    return pi


if __name__ == '__main__':
    start = time.time()
    chudnovsky2(1000000)
    print(f"Executing time = {time.time() - start}")
==========================
Executing time = 4.425478935241699

Process finished with exit code 0
.
На сайте с 18.03.2023
Offline
0
#47
Sly32 #:
Используя алгоритм Чудновского на питоне - примерно 4,5 секунд.

Это рассчитать. А присвоить/вывести я показал на js в топике выше. Думаю, быстрее ни на питоне, ни на php не будет.

W1
На сайте с 22.01.2021
Offline
289
#48
Sly32 #:
Используя алгоритм Чудновского на питоне - примерно 4,5 секунд.

Ну и что получилось в результате?

W1
На сайте с 22.01.2021
Offline
289
#49
.andrey. #:

Это рассчитать. А присвоить/вывести я показал на js в топике выше. Думаю, быстрее ни на питоне, ни на php не будет.

На самом деле, код, который показал Sly32, делает совсем не то, о чём здесь идёт речь. Поэтому вообще нет смысла рассуждать, что там будет быстрее или медленнее.

S3
На сайте с 29.03.2012
Offline
302
#50
.andrey. #:

Это рассчитать. А присвоить/вывести я показал на js в топике выше. Думаю, быстрее ни на питоне, ни на php не будет.

Наверное соглашусь. Переписал алгоритм с выводом в  stdout строки с числом Пи - генерация с точностью 20000 после запятой на моем core i7 10 Gen c 32 гигами оперативы заняла 48 секунд

from math import factorial
from decimal import *

def chudnovsky(n):
    pi = Decimal(0)
    k = 0
    while k < n:
        pi += (Decimal(-1)**k) * (Decimal(factorial(6 * k)) / ((factorial(k)**3) * (factorial(3*k))) * (13591409 + 545140134 * k) / (640320**(3 * k)))
        k += 1
        print("Шаг: {} из {}".format(k, n))
    pi = pi * Decimal(10005).sqrt() / 4270934400
    pi = pi**(-1)
    return pi


if __name__ == '__main__':
    start = time.time()
    N = 50000
    getcontext().prec = N
    val = chudnovsky(N / 14)
    print(val)

    print(f"Executino time = {time.time() - start}")

а 50000 - 600 секунд
Executino time = 629.3343698978424

Для справки 
с помощью формулы Чудновского два инженера Александр Йи и Сингеру Кондо в 2010 году объявили о новом мировом рекорде вычисления Пи на персональном компьютере: 5 трлн знаков после запятой. Компьютеру с 12 ядрами, 97 Гб памяти и 19 жесткими дисками потребовалось 60 дней для выполнения расчетов.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий