Benutzer-Werkzeuge

Webseiten-Werkzeuge


pi_per_skript_berechnen

Dies ist eine alte Version des Dokuments!


Pi per Skript berechnen

Es ist möglich eine Annäherung von Pi mit dem ArcTangenz zu berechnen. Vier mal der ArcTangenz von 1 entspricht in etwa Pi.

> echo "scale=10; 4*a(1)" | bc -l
3.1415926532

Rechengrundlage aus Wikipedia

~/bin/Pi_Wikipedia.sh
#!/bin/bash
 
#------------------------------------------------------------------------------#
#
# Pi
#
# Wikipedia
#
#------------------------------------------------------------------------------#
 
if [ "$(uname -s)" = "FreeBSD" ] ; then
        B="tail -r"
elif [ "$(uname -s)" = "Linux" ] ; then
        B="tac"
else
        echo "Dieses System wird nicht unterstützt"
        exit 1
fi
 
echo "3; 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1, 1, 2, 2, 2, 2, 1, 84, 2, 1, 1, 15, 3, 13, 1, 4, 2, 6, 6, 99, 1, 2, 2, 6, 3, 5, 1, 1, 6, 8, 1, 7, 1, 2, 3, 7, 1, 2, 1, 1, 12, 1, 1, 1, 3, 1, 1, 8, 1, 1, 2, 1, 6, 1, 1, 5, 2, 2, 3, 1, 2, 4, 4, 16,
1, 161, 45, 1, 22, 1, 2, 2, 1, 4, 1, 2, 24, 1, 2, 1, 3, 1, 2, 1, 1, 10, 2, 5, 4, 1, 2, 2, 8, 1, 5, 2, 2, 26, 1, 4, 1, 1, 8, 2, 42, 2, 1, 7, 3, 3, 1, 1, 7, 2, 4, 9, 7, 2, 3, 1, 57, 1, 18, 1, 9, 19, 1, 2, 18, 1, 3, 7, 30, 1, 1, 1, 3, 3, 3, 1, 2, 8, 1,
1, 2, 1, 15, 1, 2, 13, 1, 2, 1, 4, 1, 12, 1, 1, 3, 3, 28, 1, 10, 3, 2, 20, 1, 1, 1, 1, 4, 1, 1, 1, 5, 3, 2, 1, 6, 1, 4" \
  | tr -s '[;,]' '\n' \
  | ${B} \
  | while read ZAHL
do
        if [ -z "${FORMEL}" ] ; then
                FORMEL="${ZAHL}"
        else
                FORMEL="(${ZAHL}+1/${FORMEL})"
        fi
        echo "${FORMEL}"
done | tail -n1 | sed -e 's/.*/scale=201;&/' | bc -l
> ~/bin/Pi_Wikipedia.sh
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
2231725359408128481117450284102701938521105559644622948954930381958

Pi berechnen

~/bin/Pi_1.sh
#!/bin/bash
 
 
#------------------------------------------------------------------------------#
#
# Pi berechnen
#
# https://youtu.be/d-o3eB9sfls
#
# Es erfolgt nur eine einzige Berechnung,
# dabei ist die max. Länge der Aufgabe zu beachten,
# die bei Verwendeung von "bc" 1000 Elemente nicht überschreiten darf.
#
#------------------------------------------------------------------------------#
 
#VERSION="v2020110100"
VERSION="v2020110200"
 
#------------------------------------------------------------------------------#
# Pi²/6 = 1/1² + 1/2² + 1/3² + 1/4² + 1/5² + 1/6² + 1/7² + 1/8² + 1/9² + 1/10² + ...
 
# 997 ist bei Verwendung von "bc" das Maximum
ANZAHL='997'
for NR in $(seq 1 ${ANZAHL})
do
        if [ "x${AUFGABE}" = "x" ] ; then
                AUFGABE="1/${NR}^2"
        else
                AUFGABE="${AUFGABE} + 1/${NR}^2"
        fi
done
 
echo "
# Pi berechnen
Kettenbruch mit ${ANZAHL} Elementen:"
echo "Pi²/6 = ${AUFGABE}" | cut -b-80
PI26="$(echo "${AUFGABE}" | bc -l)"
PI="$(echo "sqrt (${PI26} * 6)" | bc -l)"
echo "Pi = ${PI}"
unset ANZAHL
unset AUFGABE
 
#------------------------------------------------------------------------------#
> ~/bin/Pi_1.sh 

# Pi berechnen
Kettenbruch mit 997 Elementen:
Pi²/6 = 1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 + 1/5^2 + 1/6^2 + 1/7^2 + 1/8^2 + 1/9^2 +
Pi = 3.14063518479926959476
~/bin/Pi_2.sh
#!/bin/bash
 
#------------------------------------------------------------------------------#
#
# Pi berechnen
#
# https://youtu.be/d-o3eB9sfls
#
# Um in der max. Aufgabenlänge nicht weiter beschränkt zu sein, werden die
# Teilaufgaben bereits berechnet.
# Das hat zur Folge, dass die gesamte Berechnung deutlich länger dauert
# und dass das Limit jetzt die Größe des Ergebnisses ist.
#
#------------------------------------------------------------------------------#
 
VERSION="v2020110200"
 
if [ "x${1}" == x ] ; then
        echo "${0}"
        echo "${0} [Anzahl der Kettenbrüche in der Aufgabe]"
        echo "${0} 21"
        exit 123
else
        ANZAHL="${1}"
fi
 
#------------------------------------------------------------------------------#
# Pi²/6 = 1/1² + 1/2² + 1/3² + 1/4² + 1/5² + 1/6² + 1/7² + 1/8² + 1/9² + 1/10² + ...
 
for NR in $(seq 1 ${ANZAHL})
do
        if [ "x${AUSGABE}" = "x" ] ; then
                AUSGABE="$(echo "1/${NR}^2" | bc -l)"
        else
                AUSGABE="$(echo "${AUSGABE} + 1/${NR}^2" | bc -l)"
        fi
done
 
echo "sqrt (${AUSGABE} * 6)" | bc -l
 
#------------------------------------------------------------------------------#

Laufzeit ca. 8 Minuten (also "mehr Geduld"…):

> ~/bin/Pi_2.sh 100000
3.14158310432644048375

Es geht auch noch etwas genauer…

~/bin/Pi_3.sh
#!/bin/bash
 
 
#------------------------------------------------------------------------------#
#
# Pi generieren
#
# https://youtu.be/d-o3eB9sfls
#
# Um in der max. Aufgabenlänge nicht weiter beschränkt zu sein, werden die
# Teilaufgaben bereits berechnet.
# Das hat zur Folge, dass die gesamte Berechnung deutlich länger dauert
# und dass das Limit jetzt die Größe des Ergebnisses ist.
#
# Zusätzlich kann die Rechengenauigkeit von "bc" hier eingestellt werden.
#
#------------------------------------------------------------------------------#
 
VERSION="v2020110200"
 
GENAUIGKEIT="64"
#GENAUIGKEIT="256"
 
if [ "x${1}" == x ] ; then
        echo "${0}"
        echo "${0} [Anzahl der Kettenbrüche in der Aufgabe]"
        echo "${0} 21"
        exit 123
else
        ANZAHL="${1}"
fi
 
#------------------------------------------------------------------------------#
# Pi²/6 = 1/1² + 1/2² + 1/3² + 1/4² + 1/5² + 1/6² + 1/7² + 1/8² + 1/9² + 1/10² + ...
 
for NR in $(seq 1 ${ANZAHL})
do
        if [ "x${AUSGABE}" = "x" ] ; then
                AUSGABE="$(echo "1/${NR}^2" | sed -e "s/.*/scale=${GENAUIGKEIT};&/" | bc -l)"
        else
                AUSGABE="$(echo "${AUSGABE} + 1/${NR}^2" | sed -e "s/.*/scale=${GENAUIGKEIT};&/" | bc -l)"
        fi
done
 
echo "sqrt (${AUSGABE} * 6)" | sed -e "s/.*/scale=${GENAUIGKEIT};&/" | bc -l
 
#------------------------------------------------------------------------------#

Laufzeit ca. 8 Minuten (also "Geduld"…):

> ~/bin/Pi_3.sh 100000
3.1415831043264409590369262630429532262094360645083129709541933516
/home/http/wiki/data/attic/pi_per_skript_berechnen.1647009381.txt · Zuletzt geändert: von manfred