14 #include "cln/rational.h"
15 #include "cln/float.h"
19 const cl_R log (const cl_R& a, const cl_R& b)
24 // log(a,b) rational errechenbar -> liefern.
25 // Sonst a und b in Floats umwandeln.
26 // a Float, b rational -> bei b=1 Error, sonst b := (float b a)
27 // a rational, b Float -> bei a=1 Ergebnis 0, sonst a := (float a b)
28 // a,b Floats -> log(a,b) = ln(a)/ln(b)
33 if (eq(b,1)) { throw division_by_0_exception(); }
37 if (logp(The(cl_RA)(a),The(cl_RA)(b),&l))
39 // a,b beide in Floats umwandeln:
40 a = cl_float(The(cl_RA)(a)); b = cl_float(The(cl_RA)(b));
43 b = cl_float(The(cl_RA)(b),The(cl_F)(a)); // b := (float b a)
47 if (eq(a,1)) { return 0; } // a=1 -> Ergebnis 0
48 a = cl_float(The(cl_RA)(a),The(cl_F)(b)); // a := (float a b)
51 // Nun a,b beide Floats.
52 return ln(The(cl_F)(a)) / ln(The(cl_F)(b));