💻 Ο Τύπος BBP – Πώς Υπολογίζουμε Ένα Μακρινό Ψηφίο του π Χωρίς τα Προηγούμενα

Φωτεινό γραφικό περιβάλλον υπολογιστή του 1995 με παράθυρα που παρουσιάζουν τον τύπο BBP, δεκαεξαδικά ψηφία του \(\pi\) και κόκκινο κυκλικό λογότυπο με λευκό «e».

Το 1995 οι David Bailey, Peter Borwein και Simon Plouffe ανακάλυψαν έναν εξαιρετικά ασυνήθιστο τύπο για τον αριθμό \(\pi\). Ο τύπος, γνωστός σήμερα ως τύπος Bailey–Borwein–Plouffe ή απλώς BBP, επιτρέπει τον υπολογισμό ενός μακρινού δεκαεξαδικού ψηφίου του \(\pi\), χωρίς να χρειάζεται να έχουν υπολογιστεί όλα τα προηγούμενα.

\[\pi=\sum_{k=0}^{\infty}\frac{1}{16^k}\left(\frac{4}{8k+1}-\frac{2}{8k+4}-\frac{1}{8k+5}-\frac{1}{8k+6}\right).\]

Η σχετική εργασία δημοσιεύθηκε στο περιοδικό Mathematics of Computation το 1997. Το εντυπωσιακό χαρακτηριστικό δεν είναι μόνο η γρήγορη σύγκλιση της σειράς, αλλά κυρίως η ιδιαίτερη σύνδεσή της με τη βάση \(16\).

Γιατί εμφανίζεται η βάση 16;

Ο παράγοντας \(16^{-k}\) ταιριάζει ακριβώς με τη δεκαεξαδική γραφή. Στη βάση \(16\), ο αριθμός \(\pi\) αρχίζει ως

3.243F6A8885A308D313198A2E…

Κάθε δεκαεξαδικό ψηφίο αντιστοιχεί ακριβώς σε τέσσερα δυαδικά ψηφία. Επομένως, η ίδια μέθοδος παρέχει πρόσβαση και σε δυαδικά ψηφία του \(\pi\), σε ομάδες των τεσσάρων.

Πώς γίνεται η «παράκαμψη» των προηγούμενων ψηφίων;

Για να φτάσουμε κοντά στη θέση \(n\), εξετάζουμε το κλασματικό μέρος του \(16^n\pi\). Στο τμήμα της σειράς όπου \(k\le n\), οι μεγάλες δυνάμεις του 16 μπορούν να υπολογιστούν κατά μέτρο των παρονομαστών \(8k+j\). Δεν χρειάζεται λοιπόν να αποθηκευτεί ολόκληρη η τεράστια δεκαδική ανάπτυξη του \(\pi\).

Το υπόλοιπο τμήμα, όπου \(k>n\), περιέχει αρνητικές δυνάμεις του 16 και μειώνεται πολύ γρήγορα. Ο συνδυασμός αρθρωτής αριθμητικής και μιας μικρής ουράς της σειράς απομονώνει τα ζητούμενα δεκαεξαδικά ψηφία.

Πόσο γρήγορα συγκλίνει;

Όροι Προσέγγιση του \(\pi\) Απόλυτο σφάλμα
13,133333333333333\(8{,}26\times10^{-3}\)
23,141422466422466\(1{,}70\times10^{-4}\)
33,141587390346582\(5{,}26\times10^{-6}\)
43,141592457567436\(1{,}96\times10^{-7}\)
63,141592653228088\(3{,}62\times10^{-10}\)
Απλό πρόγραμμα Python για τη σειρά BBP
from decimal import Decimal, getcontext

def pi_bbp(terms=20, precision=50):
    getcontext().prec = precision
    total = Decimal(0)

    for k in range(terms):
        k = Decimal(k)
        total += (Decimal(1) / (Decimal(16) ** k)) * (
            Decimal(4) / (8*k + 1)
            - Decimal(2) / (8*k + 4)
            - Decimal(1) / (8*k + 5)
            - Decimal(1) / (8*k + 6)
        )
    return total

print(pi_bbp())

Το πρόγραμμα υπολογίζει το \(\pi\) από τη σειρά. Η άμεση εξαγωγή ενός πολύ μακρινού δεκαεξαδικού ψηφίου απαιτεί επιπλέον αρθρωτή ύψωση σε δύναμη· αυτή είναι η ουσιαστική αλγοριθμική καινοτομία της μεθόδου BBP.

Το πραγματικά παράξενο:
ο τύπος δεν υπολογίζει απλώς γρήγορα το \(\pi\)· μας επιτρέπει να «πηδήξουμε» σε μια μακρινή θέση της δεκαεξαδικής του ανάπτυξης.

Για κοινοποίηση: Μπορούμε να βρούμε ένα μακρινό ψηφίο του \(\pi\) χωρίς να γνωρίζουμε όλα όσα προηγούνται; Ο τύπος BBP κάνει ακριβώς αυτό στη βάση 16.

📚
Έρχεται το πολλαπλό βιβλίο ΝΕΟ — βρες όλες τις επιλογές εδώΠολλαπλό βιβλίο ΝΕΟ — 437 βιβλία σε PDF
PDF & Ψηφιακά Μαθησιακά Αντικείμενα — χωρίς εγγραφή • Portify
📚 437 βιβλία🎬 22.000+ Ψηφιακά Μαθησιακά Αντικείμενα
Δες τα βιβλία →

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου