// Implementation.
-#include "cl_ffloat.h"
+#include "cln/ffloat.h"
#include "cl_FF.h"
-#undef MAYBE_INLINE
-#define MAYBE_INLINE inline
+/* For inline version of minusp */
+#include "cl_inline.h"
#include "cl_FF_minusp.cc"
+namespace cln {
+
const cl_FF cl_hypot (const cl_FF& a, const cl_FF& b)
{
// a=0.0 -> liefere abs(b).
// b=0.0 -> liefere abs(a).
// e:=max(exponent(a),exponent(b)).
-// a':=a/2^e bzw. 0.0 bei Underflowmöglichkeit (beim Skalieren a':=a/2^e
+// a':=a/2^e bzw. 0.0 bei Underflowmöglichkeit (beim Skalieren a':=a/2^e
// oder beim Quadrieren a'*a': 2*(e-exponent(a))>exp_mid-exp_low-1
// d.h. exponent(b)-exponent(a)>floor((exp_mid-exp_low-1)/2) ).
-// b':=b/2^e bzw. 0.0 bei Underflowmöglichkeit (beim Skalieren b':=b/2^e
+// b':=b/2^e bzw. 0.0 bei Underflowmöglichkeit (beim Skalieren b':=b/2^e
// oder beim Quadrieren b'*b': 2*(e-exponent(b))>exp_mid-exp_low-1
// d.h. exponent(a)-exponent(b)>floor((exp_mid-exp_low-1)/2) ).
// c':=a'*a'+b'*b', c':=sqrt(c'), liefere 2^e*c'.
var uintL uexp = FF_uexp(cl_ffloat_value(a));
if (uexp == 0)
// a=0.0 -> liefere (abs b) :
- return (minusp(b) ? -b : b);
+ return (minusp_inline(b) ? -b : b);
a_exp = (sintL)(uexp - FF_exp_mid);
}
{
var uintL uexp = FF_uexp(cl_ffloat_value(b));
if (uexp == 0)
// b=0.0 -> liefere (abs a) :
- return (minusp(a) ? -a : a);
+ return (minusp_inline(a) ? -a : a);
b_exp = (sintL)(uexp - FF_exp_mid);
}
// Nun a_exp = float_exponent(a), b_exp = float_exponent(b).
var cl_FF nc = square(na) + square(nb);
return scale_float(sqrt(nc),e); // c' := sqrt(c'), 2^e*c'
}
+
+} // namespace cln