2016-03-25 13 views
1

Ich versuche, einen Taschenrechner mit arbiträrer Genauigkeit Mathematik zu machen, aber ich kann nicht herausfinden, wie mit negativen Exponenten umzugehen. Was ist der effizienteste Weg, eine Operation mit n ** - x durchzuführen? Bis jetzt habe ich versucht 1/n ** x, das Problem ist, dass ich keine Möglichkeit habe, zu wissen, wie viele Zahlen den Dezimalpunkt folgen und die Verwendung von ganzen Zahlen zum Beispiel den Zweck der Erstellung eines Taschenrechners mit arbitrary-precision wie es würde die Größe der zulässigen Eingabezahlen einschränken. Ich habe mich gefragt, ob es einen anderen Weg gibt, dies zu tun.Implementieren von negativen Exponenten mit Ganzzahlen mit beliebiger Genauigkeit?

Ich programmiere in C aber jede Methode für negative Exponenten arbeitet ehrlich.

+0

Was hat das mit Linked-Lists zu tun? –

+0

Können Sie näher erläutern, wie Ihr Taschenrechner verknüpfte Listen verwendet? Soll das ganze Zahlen mit beliebiger Genauigkeit speichern? – templatetypedef

+0

jeder Knoten der Liste enthält eine Zahl der Zahlen, die betrieben werden, ja, ich vergaß zu erwähnen, dass es willkürliche Genauigkeit ist, aber ich brauche das genaue Ergebnis, wenn ich von binär zu dezimal konvertieren würde, damit ich später hinzufügen kann eine andere Potenz von 2 ** - x – vega2015

Antwort

2

Wenn Sie Arithmetik mit beliebiger Genauigkeit mit negativen Exponenten unterstützen müssen, klingt es vielleicht so, als würden Sie Ihre Zahl als Bruch in der einfachsten Form speichern, wobei Zähler und Nenner jeweils Ganzzahlen mit ganzzahliger Genauigkeit speichern. Um etwas wie x -n mit x = a/b zu implementieren, würden Sie mit der Nummer b n/a n enden. Auf diese Weise müssen Sie sich nicht um Dezimalstellen kümmern, was eine gute Sache ist, da die meisten reellen Zahlen keine endlichen Dezimaldarstellungen haben.

+0

es klingt, als könnte ich das verwenden, aber ich bin ein bisschen verwirrt, was b ist, könntest du vielleicht ein Beispiel geben, indem du echte Zahlen verwendest? – vega2015

+1

Sicher! Angenommen, Sie möchten die Zahl 5 speichern. Speichern Sie stattdessen 5/1. Um dann 5^-3 zu berechnen, können Sie 1/5^3 = 1/125 speichern. – templatetypedef

+0

Das bringt mich definitiv auf die richtige Spur, danke – vega2015