Skip to content

Instantly share code, notes, and snippets.

@omnidan
Created December 20, 2011 20:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save omnidan/1503154 to your computer and use it in GitHub Desktop.
Save omnidan/1503154 to your computer and use it in GitHub Desktop.
EULER.DE.PY | German version of EULER.PY - A program that calculates the euler number e.
#!/usr/bin/env python
# Die Euler'sche Zahl e
# e = 2 + 1/2 + 1/3 + 1/4 + 1/5 + ...
import traceback
# Display Variablen
DISCALC = False # Berechnungen anzeigen
LOGTIME = False # Zeit/Datum in den Logs anzeigen
# /Display Variablen
# Konstanten
VERSION = "v0.4g (German Edition)" # Version, nicht bearbeiten!
LOGPREF = ["INFO", "DONE", "FAIL"]
if DISCALC == True: LOGPREF.append("CALC")
# /Konstanten
# Log Funktion
from time import strftime
def log(prefix, text, bold=False):
if bold == True:
text = '\033[0;1m' + text + '\033[0;0m'
global LOGTIME, LOGPREF
if prefix in LOGPREF:
if prefix == "INFO": prefix = '\033[94m' + prefix + '\033[0;1m'
if prefix == "DONE": prefix = '\033[92m' + prefix + '\033[0;1m'
if prefix == "CALC": prefix = '\033[93m' + prefix + '\033[0;1m'
if prefix == "FAIL": prefix = '\033[91m' + prefix + '\033[0;1m'
pre = '\033[0;1m' + "[" + prefix + "]" + '\033[0m'
if LOGTIME == False: print "%s %s" % (pre, text)
else: print "[%s] %s %s" % (strftime("%d.%m.%y|%H:%M:%S"), pre, text)
# /Log Funktion
try:
from sys import argv
log("INFO", "\033[91;1mEULER.PY\033[0;1m \033[94;1m%s\033[0;1m \033[93;1m--\033[0;1m \033[92;1mby Daniel Bugl" % VERSION, bold=True)
log("INFO", " \033[0;1mUsage:\033[0;0m python " + argv[0] + " <NACHKOMMASTELLEN> <ITERATIONEN>")
log("INFO", " \033[0;1mEinstellungen:\033[0;0m")
nachkommastellen = 100 # Nachkommastellen
if len(argv) > 1: nachkommastellen = int(argv[1])
log("INFO", " \033[0;1mNachkommastellen:\033[0;0m " + str(nachkommastellen))
praezision = int(round(nachkommastellen*1.5)) # Auto-Praezision
if len(argv) > 2: praezision = int(argv[2])
log("INFO", " \033[0;1mIterationen:\033[0;0m " + str(praezision))
import decimal as dc
dc.getcontext().prec = nachkommastellen+1 # Praezision setzen
# Beginne mit den Berechnungen
def fac(nenner):
log("CALC", "\033[0;1me +=\033[0;0m %s/%s" % (str(1), str(nenner)))
return dc.Decimal(str(1))/dc.Decimal(str(nenner))
nenner = 1 # Initiiere den Nenner
e = 0 # Initiiere e
e += 2 # e = 2 + ...
for x in range(2, praezision): # Naeherung auf e mittels Nenner, beginnend mit 2 (1/2)
nenner *= x # Vergroessere Nenner - Naeherung auf e
e += fac(nenner) # e += 1/2 + 1/3 + 1/4 + 1/5 + ...
# /Ende der Berechnungen
# Ausgabe der Berechnungen
log("DONE", "Die Euler'sche Zahl e wurde auf \033[0;1m%d Nachkommastellen\033[0;0m berechnet." % nachkommastellen)
log("DONE", " (die letzten paar Stellen koennen bei zu geringer Iterationszahl ungenau sein)")
log("DONE", "\033[0;1me = \033[0;0m")
print e
# /Ausgabe der Berechnungen
# TODO: Save e to a file, like: 2.\n50-digits\n50-digits\n...
except:
log("FAIL", traceback.format_exc()) # Fehlermeldungen anzeigen.
exit(1) # Exit.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment