// equal().
// General includes.
#include "cl_sysdep.h"
// Specification.
#include "cln/real.h"
// Implementation.
#include "cl_R.h"
#include "cl_RA.h"
#include "cln/integer.h"
namespace cln {
inline cl_boolean equal (const cl_F& x, const cl_F& y)
{
return (cl_boolean) (compare(x,y) == 0);
}
cl_boolean equal (const cl_R& x, const cl_R& y)
{
// Methode:
// Beide rational oder beide Floats -> klar.
// Eine rational, eine Float ->
// Die rationale Zahl muß einen Zweierpotenz-Nenner haben, sonst verschieden.
// Die rationale Zahl zum Float machen, vergleichen.
// Verschieden -> Das war's.
// Gleich -> Das Float mit RATIONAL rational machen, nochmals vergleichen.
realcase2(x
, realcase2(y
, // beides rationale Zahlen
return equal(x,y);
, // x rational, y Float -> x in Float umwandeln
if (!power2p(denominator(x)))
return cl_false;
if (!equal(cl_float(x,y),y))
return cl_false;
return equal(x,rational(y));
);
, realcase2(y
, // x Float, y rational -> y in Float umwandeln
if (!power2p(denominator(y)))
return cl_false;
if (!equal(x,cl_float(y,x)))
return cl_false;
return equal(rational(x),y);
, // beides Floats
return equal(x,y);
);
);
}
} // namespace cln
syntax highlighted by Code2HTML, v. 0.9.1