Benutzer-Werkzeuge

Webseiten-Werkzeuge


pi_per_skript_berechnen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
pi_per_skript_berechnen [2020-11-02 10:27:20] manfredpi_per_skript_berechnen [2022-03-11 21:15:15] (aktuell) manfred
Zeile 1: Zeile 1:
 +====== Pi per Skript berechnen ======
 +
 +Es ist möglich eine Annäherung von Pi mit dem ArkusTangens zu berechnen. Vier mal der ArkusTangens von 1 entspricht in etwa Pi.
 +  > echo "scale=10; 4*a(1)" | bc -l
 +  3.1415926532
 +
 +
 +==== Rechengrundlage aus Wikipedia ====
 +
 +<file bash ~/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
 +</file>
 +
 +  > ~/bin/Pi_Wikipedia.sh
 +  3.141592653589793238462643383279502884197169399375105820974944592307\
 +  81640628620899862803482534211706798214808651328230664709384460955058\
 +  2231725359408128481117450284102701938521105559644622948954930381958
 +
 +
 +===== Pi berechnen =====
 +
 +<file bash ~/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
 +
 +#------------------------------------------------------------------------------#
 +</file>
 +
 +  > ~/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
 +
 +
 +<file bash ~/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
 +
 +#------------------------------------------------------------------------------#
 +</file>
 +
 +Laufzeit ca. 8 Minuten (also "mehr Geduld"...):
 +  > ~/bin/Pi_2.sh 100000
 +  3.14158310432644048375
 +
 +**Es geht auch noch etwas genauer...**
 +
 +<file bash ~/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
 +
 +#------------------------------------------------------------------------------#
 +</file>
 +
 +Laufzeit ca. 8 Minuten (also "Geduld"...):
 +  > ~/bin/Pi_3.sh 100000
 +  3.1415831043264409590369262630429532262094360645083129709541933516
 +