Jak wygenerować Pi do określonej liczby miejsc po przecinku ze skryptu?


Odpowiedzi:


19

Zakładając, że masz w systemie narzędzie bc(Basic Calculator) , możesz użyć następującego polecenia i odrobiny dobrej starej matematyki, aby obliczyć π do 10.000 miejsc po przecinku:

echo "scale=10000; 4*a(1)" | bc -l

Prawdopodobnie zajmie to sporo czasu dla 10 000 miejsc po przecinku.

Złamanie polecenia ...

  • skala = 10000 - określa liczbę miejsc dziesiętnych do wykorzystania w wyniku
  • 4 * a (1) - zwraca arcus tangens 1 [co równa się 45 °: 45 x (π / 180) lub ¼π], a następnie mnoży przez 4, aby uzyskać π.
  • bc -l - potokuje pełny ciąg funkcji do narzędzia bc , -l określa załadowanie standardowej biblioteki matematycznej potrzebnej dla funkcji arctangent, a () .

Aby zawinąć to w skrypt, jak określono w pytaniu, użyj ulubionego edytora, aby napisać następujące i zapisać jako generatepi.sh:

#!/bin/bash
echo "scale=$1; 4*a(1)" | bc -l

Następnie użyj terminalu chmod +x generatepi.shz folderu, w którym zapisałeś plik, co da uprawnienia do wykonywania skryptu. Składnia jest wtedy generatepi.sh [number of places]. Zauważ, że używa to bardzo podstawowego sposobu obsługi parametrów i nie sprawdziłby poprawności danych wejściowych, więc upewnij się, że przekazujesz tylko dodatnie liczby całkowite jako parametr.

Większość systemów Linux powinna je mieć, bcale w niektórych przypadkach może być konieczne ich zainstalowanie (np. Apt-get na Ubuntu, emerge na Gentoo itp.). Istnieje również port bc dla Windows .


istnieją natywne kalkulatory pi dla okien - overclockerzy używają ich do testowania stabilności
Journeyman Geek

~ 3 minuty na moim komputerze, całkiem bezużyteczne w skrypcie. +1 za użycie bc.
cyr

Myślę, że „b” w „bc” oznacza „Berkeley” zamiast „Bench”.
user1364368

Dzięki. Zaktualizowano do „podstawowego kalkulatora” opartego na en.wikipedia.org/wiki/Bc_(programming_language)
Gaff
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.