#define _CL_F_H
#include "cln/number.h"
-#include "cl_macros.h"
+#include "base/cl_macros.h"
#include "cln/float.h"
namespace cln {
-nonreturning_function(extern, cl_error_floating_point_overflow, (void));
-nonreturning_function(extern, cl_error_floating_point_underflow, (void));
-
#define underflow_allowed() (! cl_inhibit_floating_point_underflow)
// SF 1 8 16
// FF 1 8 23
// DF 1 11 52
-// LF 1 32 intDsize*n >= 53
+// LF 1 32 or 64 intDsize*n >= 53
// Konversionen ohne Rundung:
extern const cl_DF cl_SF_to_DF (const cl_SF& x);
// cl_SF_to_LF(x,len) wandelt ein Short-Float x in ein Long-Float mit len Digits um.
-// > uintC len: gewünschte Anzahl Digits, >=LF_minlen
+// > uintC len: gewünschte Anzahl Digits, >=LF_minlen
extern const cl_LF cl_SF_to_LF (const cl_SF& x, uintC len);
// cl_FF_to_DF(x) wandelt ein Single-Float x in ein Double-Float um.
extern const cl_DF cl_FF_to_DF (const cl_FF& x);
// cl_FF_to_LF(x,len) wandelt ein Single-Float x in ein Long-Float mit len Digits um.
-// > uintC len: gewünschte Anzahl Digits, >=LF_minlen
+// > uintC len: gewünschte Anzahl Digits, >=LF_minlen
extern const cl_LF cl_FF_to_LF (const cl_FF& x, uintC len);
// cl_DF_to_LF(x,len) wandelt ein Double-Float x in ein Long-Float mit len Digits um.
-// > uintC len: gewünschte Anzahl Digits, >=LF_minlen
+// > uintC len: gewünschte Anzahl Digits, >=LF_minlen
extern const cl_LF cl_DF_to_LF (const cl_DF& x, uintC len);
extern const cl_DF cl_LF_to_DF (const cl_LF& x);
-// Fehlermeldung wegen NaN
-nonreturning_function(extern, cl_error_floating_point_nan, (void));
-
-
// Runtime typing support.
extern cl_class cl_class_ffloat;
extern cl_class cl_class_dfloat;
extern cl_class cl_class_lfloat;
// Type test.
-inline cl_boolean longfloatp (const cl_F& x)
+inline bool longfloatp (const cl_F& x)
{
if (x.pointer_p())
if (x.pointer_type() == &cl_class_lfloat)
- return cl_true;
- return cl_false;
+ return true;
+ return false;
}
// Macro: verteilt je nach Float-Typ eines Floats x auf 4 Statements.
#endif
// Macro: verteilt je nach Float-Typ eines Floats x auf 4 Statements,
-// die x vom jeweiligen Float-Typ benutzen dürfen.
+// die x vom jeweiligen Float-Typ benutzen dürfen.
// floatcase(x, SF_statement,FF_statement,DF_statement,LF_statement);
// x sollte eine Variable sein.
#define floatcase(x, SF_statement,FF_statement,DF_statement,LF_statement) \
#define GEN_LF_OP2_AUX0(arg1,arg2,F_OP,r,ergebnis_zuweisung) \
var uintC len1 = TheLfloat(arg1)->len; \
var uintC len2 = TheLfloat(arg2)->len; \
- if (len1 == len2) /* gleich -> direkt ausführen */ \
+ if (len1 == len2) /* gleich -> direkt ausführen */ \
{ ergebnis_zuweisung CONCAT(NOMAP,r) (LF, F_OP(arg1,arg2)); } \
- elif (len1 > len2) /* -> arg2 auf die Länge von arg1 bringen */ \
+ elif (len1 > len2) /* -> arg2 auf die Länge von arg1 bringen */ \
{ ergebnis_zuweisung CONCAT(MAP,r) (LF, LF_shorten_len2, \
F_OP(arg1,extend(arg2,len1)) ); \
} \
- else /* (len1 < len2) -> arg1 auf die Länge von arg2 bringen */ \
+ else /* (len1 < len2) -> arg1 auf die Länge von arg2 bringen */ \
{ ergebnis_zuweisung CONCAT(MAP,r) (LF, LF_shorten_len1, \
F_OP(extend(arg1,len2),arg2) ); \
}
// Macro: dispatches according to a float_format_t value.
// floatformatcase(value, SF_statement,FF_statement,DF_statement,LF_statement)
// LF_statement darf auf `len' zugreifen, die zu `value' korrespondierende
-// Mantissenlänge (gemessen in Digits).
+// Mantissenlänge (gemessen in Digits).
#define floatformatcase(value, SF_statement,FF_statement,DF_statement,LF_statement) \
{ if ((value) <= float_format_sfloat) { SF_statement } \
elif ((value) <= float_format_ffloat) { FF_statement } \