Hallo,
ich wollte große Potenzen wie exemplarisch
2^8832 und dergleichen berechnen.
Dafür nutze ich die Logarithmus-Gesetze,
a^b, lässt sich genauso gut auch als 10^(b*log10(a)) schreiben, das wiederum als 10^floor(b*log10(a)) * 10^(b*log10(a)-floor(b*log10(a)))
Der Vorteil an dieser Schreibweise:
Durch die Isolation, wird auf der linken Seite des Terms lediglich 10^n berechnet. Das heißt, das Resultat ist eine Zahl mit n Nullen (einfach die 10, n mal multipliziert).
Auf der rechten Seite des Terms erhalten wir eine kleine Komma-Zahl. Der Trick ist nun, diese Komma-Zahl entsprechend korrekt zu verschieben.
Hier mal die Implementierung:
Das Problem ist halt: Die Zahl stimmt für die ersten 15 Stellen, danach endet aber auch schon die Kommazahl.
Gibt es eine Möglichkeit beliebig genau, b*log(a) auszurechnen? So auf 200 Stellen nach dem Komma?
Lieben Dank!
_
ich wollte große Potenzen wie exemplarisch
2^8832 und dergleichen berechnen.
Dafür nutze ich die Logarithmus-Gesetze,
a^b, lässt sich genauso gut auch als 10^(b*log10(a)) schreiben, das wiederum als 10^floor(b*log10(a)) * 10^(b*log10(a)-floor(b*log10(a)))
Der Vorteil an dieser Schreibweise:
Durch die Isolation, wird auf der linken Seite des Terms lediglich 10^n berechnet. Das heißt, das Resultat ist eine Zahl mit n Nullen (einfach die 10, n mal multipliziert).
Auf der rechten Seite des Terms erhalten wir eine kleine Komma-Zahl. Der Trick ist nun, diese Komma-Zahl entsprechend korrekt zu verschieben.
Hier mal die Implementierung:
C#-Quellcode
- public static string CalculateBigPower(double basis, int exponent)
- {
- StringBuilder sb = new StringBuilder();
- int amountZeroes = (int)((double)exponent * Math.Log10(basis));
- double specification = (double)exponent * Math.Log10(basis) - amountZeroes;
- specification = Math.Pow(10, specification);
- int specificationAmount = (int)(Math.Log10(specification) + 1) + amountZeroes;
- string data = (specification + "").Replace(",", "");
- for (int i = 0; i < specificationAmount; i++)
- {
- if (i < data.Length)
- sb.Append(data[i]);
- else sb.Append("0");
- }
- return sb.ToString();
- }
Das Problem ist halt: Die Zahl stimmt für die ersten 15 Stellen, danach endet aber auch schon die Kommazahl.
Gibt es eine Möglichkeit beliebig genau, b*log(a) auszurechnen? So auf 200 Stellen nach dem Komma?
Lieben Dank!
_
Und Gott alleine weiß alles am allerbesten und besser.