2012-03-29 5 views
2

Ich benutze gmp mpf_t zu versuchen und sehr hohe Präzision zu erhalten.Gmp mpf_pow_ui Funktion

Mein Bereich der Genauigkeit reicht von negativen Billionen bis zu positiven Billionen, sowie 1 über diesen Zahlen. Allerdings unterstützt mpf keine Potenzfunktion, die negative Exponenten zulässt, gibt es eine Möglichkeit dies zu umgehen, wenn ich meinen Wert auf 10^-30 erhöhen möchte?

http://gmplib.org/manual/Float-Arithmetic.html#Float-Arithmetic

meine gdp ausgegeben, wenn ich versuche, mpf_pow_ui zu verwenden, wenn mein exp negativ ist:

(gdb) p exp_multiplier 
$9 = {{_mp_prec = 2, _mp_size = 3, _mp_exp = 957480584338323631, _mp_d = 0x605070}} 

einen segfault Dies führte schließlich verursacht.

Antwort

4

Im Zweifelsfall gilt Mathematik:

10^-30 = 1/10^30 

Gerade hebt es auf die positive Kraft, und den Kehr nehmen.

Es gibt eine Division-Funktion mpf_ui_div(), die einen ganzzahligen Zähler dafür nimmt.

+0

Divide ist eine teure Funktion zu bezahlen, und eine reziproke Funktion kann genauso schlimm sein, wissen Sie, ob mpf nativ eine Power-Funktion für vorzeichenbehaftete Ganzzahlen unterstützt? – Jim

+0

Der schnellste Weg, um auf eine negative Kraft zu erhöhen *** ist ***, das Gegenseitige zu nehmen. Die Teilung ist unvermeidlich. Integer powering wird mit der [binary squaring method] (http://en.wikipedia.org/wiki/Exponentiation_by_squaring) implementiert - die nur einen positiven Exponenten benötigt. – Mysticial

+0

Ich hatte gehofft, dass sie Schichten machen würden. Aber wenn das der einzige Weg ist, denke ich, ich bleibe dabei. Vielen Dank. – Jim

Verwandte Themen