Gliese
2021-05-24, 16:25:41
Wenn man nur die ersten Stellen von x^y rausfinden will, ohne die Zahl komplett auszurechnen, kann man über den Logarithmus gehen und wenn man die letzten Stellen von x^y finden will, geht das über die diskrete Exponentialfunktion.
Dafür habe ich schon ein Python3-Script gebaut, das per Default die ersten und letzten Stellen von 3↑↑4 (= 3^3^3^3) im Dezimalsystem berechnet (abgespeckte Version):
#!/usr/bin/python3
import math
from decimal import Decimal, getcontext
first_n = 80
last_n = 80
getcontext().prec = first_n * 2
def z_to_str(system, value):
if system == 10:
return str(value)
raise ValueError("Not supported yet - in Arbeit")
system = Decimal(10)
base = Decimal(3)
exponent = Decimal(3**3**3)
logged_exp = exponent / (system.ln() / base.ln())
logged_exp = logged_exp.next_plus() # bugfix
left, right = str(logged_exp).split(".")
symbols = math.ceil(logged_exp)
full = None
if symbols > first_n + last_n:
first = z_to_str(system, system ** Decimal("0." + right))
first = first.replace(".", "")
first = first[:first_n].ljust(first_n, "0")
last = z_to_str(system, pow(base, exponent, system ** last_n)).zfill(last_n)
else:
full = str(base ** exponent)
print("Basis...: " + str(base))
print("Exponent: " + str(exponent))
print("Stellen.: " + str(symbols))
if full is None:
print("Anfang..: " + first)
print("Ende....: " + last)
else:
print("Zahl....: " + full)
Nun wäre es schön, wenn ich so eine Funktion bauen könnte:
def get_symbols(system, base, exponent, start, length)
Die Funktion soll die Zahl base^exponent (Zahlensystem system) nicht ganz ausrechnen, weil sie zu groß wäre, sondern in der Mitte ab start genau length Stellen ausgeben. Ich möchte damit Stück für Stück durch die Zahl iterieren und (stichprobenartige) Statistiken anlegen.
Ist das irgendwie möglich? Oder gibt es dafür überhaupt gar keine Methode?
Ich weiß nicht, mit welchen Begriffen ich Google füttern soll, ich kriege nur Unsinn raus bzw. höchstens, dass es für die Kreiszahl Pi auf Hex-Basis so eine Formel gibt, nicht ob es für x^y sowas möglich wäre.
Dafür habe ich schon ein Python3-Script gebaut, das per Default die ersten und letzten Stellen von 3↑↑4 (= 3^3^3^3) im Dezimalsystem berechnet (abgespeckte Version):
#!/usr/bin/python3
import math
from decimal import Decimal, getcontext
first_n = 80
last_n = 80
getcontext().prec = first_n * 2
def z_to_str(system, value):
if system == 10:
return str(value)
raise ValueError("Not supported yet - in Arbeit")
system = Decimal(10)
base = Decimal(3)
exponent = Decimal(3**3**3)
logged_exp = exponent / (system.ln() / base.ln())
logged_exp = logged_exp.next_plus() # bugfix
left, right = str(logged_exp).split(".")
symbols = math.ceil(logged_exp)
full = None
if symbols > first_n + last_n:
first = z_to_str(system, system ** Decimal("0." + right))
first = first.replace(".", "")
first = first[:first_n].ljust(first_n, "0")
last = z_to_str(system, pow(base, exponent, system ** last_n)).zfill(last_n)
else:
full = str(base ** exponent)
print("Basis...: " + str(base))
print("Exponent: " + str(exponent))
print("Stellen.: " + str(symbols))
if full is None:
print("Anfang..: " + first)
print("Ende....: " + last)
else:
print("Zahl....: " + full)
Nun wäre es schön, wenn ich so eine Funktion bauen könnte:
def get_symbols(system, base, exponent, start, length)
Die Funktion soll die Zahl base^exponent (Zahlensystem system) nicht ganz ausrechnen, weil sie zu groß wäre, sondern in der Mitte ab start genau length Stellen ausgeben. Ich möchte damit Stück für Stück durch die Zahl iterieren und (stichprobenartige) Statistiken anlegen.
Ist das irgendwie möglich? Oder gibt es dafür überhaupt gar keine Methode?
Ich weiß nicht, mit welchen Begriffen ich Google füttern soll, ich kriege nur Unsinn raus bzw. höchstens, dass es für die Kreiszahl Pi auf Hex-Basis so eine Formel gibt, nicht ob es für x^y sowas möglich wäre.