Created
December 20, 2011 20:34
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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