Logarithmus (Exponent berechnen) mit GPU-basiertem Programm?

...komplette Frage anzeigen

2 Antworten

Das kommt mir insgesamt als sehr instabil vor.

Aufgrund von Fehlern in der Nummerischen Mathematik kann dir bei der Division log(343)/log(7) ebenfalls eine Zahl mit Komma herauskommen, die Frage ist was macht dein Algorithmus in diesem Fall?

Wozu willst du genau die Basis der Zahl berechnen vielleicht geht es einfacher...

Antwort bewerten Vielen Dank für Deine Bewertung
MorsGER 03.10.2016, 19:08

Danke erstmal für die Antwort. Das Programm läuft so lange, bis es eine möglichst kurze Kommazahl hat. In einem solchen Fall würde es also weitersuchen.

Ich möchte eine kurze Rechnung (7^3) für einen gegebenen Wert (343) finden. Ein einfacherer Weg wäre natürlich wünschenswert. Ich bin für Vorschläge offen! :)

0
MorsGER 03.10.2016, 20:07
@MorsGER

Aber auch danke für die Anregung mein Vorhaben zu hinterfragen. Ich habe nun eine Möglichkeit gefunden die 27000-fache Geschwindigkeit zu erreichen.

0
PeterKremsner 03.10.2016, 22:41
@MorsGER

Das ist schon mal gut :)

Bevor du dich an so Sachen machst wie Berechnungen in der GPU solltest du zunächst mal versuchen alles mögliche zu optimieren.

Dazu gehört auch an Fälle zu denken in denen dein Algorithmus nicht konvergiert, sprich gibt es Fälle in denen dein Programm endlos suchen würde.

Also zB wenn es durch Rechenungenauigkeit das richtige Ergebnis gar nicht erkennt, oder vielleicht lässt sich die Zahl ja gar nicht als x^y darstellen etc.

Ich würde auch sagen, dass du hier einen Toleranzbereich definierst, sprich wenn deine Rechnung log7(343) 3.001 ergibt kannst du sagen genauer muss es nicht sein, also nehm ich die Zahl als genau 3 an.

Vielleicht kann man aber auch deinen Algorithmus vereinfachen.

Muss denn unbedingt eine Darstellung der Form 7^3 erfolgen?

Geht denn nicht auch 343 = 10^2.535?

Welche Kriterien muss die Darstellung erfüllen bzw muss denn deine Darstellung überhaupt in der Form x^y erfolgen?

0

Du suchst also eine ganzzahlige Lösung für a^b = n mit möglichst großem a?

Ich würde im ersten Anlauf in einer Schleife b ab 2 hochzählen, bis die "b te Wurzel" kleiner als 2 ist. Da kann man bestimmt eine nette Näherungsformel finden, da dich die Nachkommastellen der Wurzel ja eigentlich nicht interessieren. Findest du ein (fast) ganzzahliges Ergebnis, machst du die Gegenprobe. Wenn du 20 stellige Zahlen hast, brauchst du höchstens 60 Versuche.

Wenn n ungerade ist, nicht durch 3 teilbar und nicht auf 5 endet, kannst du bei "kleiner als 7" aufhören.

Oder du machst eine Primfaktorenzerlegung, dann müssen alle Faktoren den gleichen Exponenten haben.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?