Github User Fetcher 1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
ieee.h File Reference
#include <math.h>

Go to the source code of this file.

Macros

#define CRI_IEEE_ULP_EQ(Lhs, Rhs, Ulp)    CR_COMPILE_ERROR(ieee_ulp_eq without a tag parameter is unsupported on this compiler.)
 
#define CRI_IEEE_ULP_NE(Lhs, Rhs, Ulp)    CR_COMPILE_ERROR(ieee_ulp_ne without a tag parameter is unsupported on this compiler.)
 
#define CRI_IEEE_ULP_T_EQ(Tag, Lhs, Rhs, Ulp)    (CRI_USER_TAG_ID(ieee_ulp_eq, Tag)((Lhs), (Rhs), (Ulp)))
 
#define CRI_IEEE_ULP_T_NE(Tag, Lhs, Rhs, Ulp)    !(CRI_USER_TAG_ID(ieee_ulp_eq, Tag)((Lhs), (Rhs), (Ulp)))
 
#define CRI_DEFINE_IEEE_ULP_EQ(Tag, Suffix)
 
#define CRI_MKNODE_ULPS   (CRI_MKNODE_ULP, CRI_MKNODE_ULP)
 
#define CRI_MKNODE_ULP(_, Var, Name)   CRI_MKNODE_STR(sz, Var, Name)
 
#define CRI_ASSERT_TEST_SPECIFIER_ieee_ulp_eq(...)   ,
 
#define CRI_ASSERT_SPECIFIER_ieee_ulp_eq(...)
 
#define CRI_ASSERT_TEST_SPECIFIER_ieee_ulp_ne(...)   ,
 
#define CRI_ASSERT_SPECIFIER_ieee_ulp_ne(...)
 
#define CRI_EPSILON_EQ(Lhs, Rhs, Eps)    (((Rhs) == (Lhs)) || ((Rhs) - (Lhs) <= (Eps) && (Lhs) - (Rhs) <= (Eps)))
 
#define CRI_EPSILON_NE(Lhs, Rhs, Eps)   !CRI_EPSILON_EQ(Lhs, Rhs, Eps)
 
#define CRI_EPSILON_T_EQ(Tag, Lhs, Rhs, Eps)   CRI_EPSILON_EQ(Lhs, Rhs, Eps)
 
#define CRI_EPSILON_T_NE(Tag, Lhs, Rhs, Eps)   CRI_EPSILON_NE(Lhs, Rhs, Eps)
 
#define CRI_MKNODE_EPSS   (CRI_MKNODE_EPS, CRI_MKNODE_EPS)
 
#define CRI_MKNODE_EPS(_, Var, Name)   CRI_MKNODE_STR(ldbl, Var, Name)
 
#define CRI_EPS_TYPE   long double
 
#define CRI_ASSERT_TEST_SPECIFIER_epsilon_eq(...)   ,
 
#define CRI_ASSERT_SPECIFIER_epsilon_eq(...)
 
#define CRI_ASSERT_TEST_SPECIFIER_epsilon_ne(...)   ,
 
#define CRI_ASSERT_SPECIFIER_epsilon_ne(...)
 

Macro Definition Documentation

◆ CRI_ASSERT_SPECIFIER_epsilon_eq

#define CRI_ASSERT_SPECIFIER_epsilon_eq ( ...)
Value:
(TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_actual, "actual", CRI_MKNODE_DEF), \
(TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_expected, "expected", CRI_MKNODE_DEF), \
(SINGLE, CRI_EPS_TYPE, cri_epsilon, "epsilon", CRI_MKNODE_EPSS) \
), __VA_ARGS__)
#define CRI_EPS_TYPE
Definition ieee.h:128
#define CRI_MKNODE_EPSS
Definition ieee.h:121
#define CRI_EPSILON_T_EQ(Tag, Lhs, Rhs, Eps)
Definition ieee.h:118
#define CRI_EPSILON_EQ(Lhs, Rhs, Eps)
Definition ieee.h:113
#define CRI_MKNODE_DEF
Definition op.h:31
#define CRI_ASSERT_SPECIFIER_OP(OpTag, OpTagless, OpName, Params,...)
Definition op.h:85
#define CRI_AS_GETTYPE(...)
Definition op.h:27

Definition at line 132 of file ieee.h.

132#define CRI_ASSERT_SPECIFIER_epsilon_eq(...) \
133 CRI_ASSERT_SPECIFIER_OP(CRI_EPSILON_T_EQ, CRI_EPSILON_EQ, epsilon_eq, ( \
134 (TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_actual, "actual", CRI_MKNODE_DEF), \
135 (TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_expected, "expected", CRI_MKNODE_DEF), \
136 (SINGLE, CRI_EPS_TYPE, cri_epsilon, "epsilon", CRI_MKNODE_EPSS) \
137 ), __VA_ARGS__)

◆ CRI_ASSERT_SPECIFIER_epsilon_ne

#define CRI_ASSERT_SPECIFIER_epsilon_ne ( ...)
Value:
(TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_actual, "actual", CRI_MKNODE_DEF), \
(TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_expected, "unexpected", CRI_MKNODE_DEF), \
(SINGLE, CRI_EPS_TYPE, cri_epsilon, "epsilon", CRI_MKNODE_EPSS) \
), __VA_ARGS__)
#define CRI_EPSILON_T_NE(Tag, Lhs, Rhs, Eps)
Definition ieee.h:119
#define CRI_EPSILON_NE(Lhs, Rhs, Eps)
Definition ieee.h:116

Definition at line 140 of file ieee.h.

140#define CRI_ASSERT_SPECIFIER_epsilon_ne(...) \
141 CRI_ASSERT_SPECIFIER_OP(CRI_EPSILON_T_NE, CRI_EPSILON_NE, epsilon_ne, ( \
142 (TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_actual, "actual", CRI_MKNODE_DEF), \
143 (TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_expected, "unexpected", CRI_MKNODE_DEF), \
144 (SINGLE, CRI_EPS_TYPE, cri_epsilon, "epsilon", CRI_MKNODE_EPSS) \
145 ), __VA_ARGS__)

◆ CRI_ASSERT_SPECIFIER_ieee_ulp_eq

#define CRI_ASSERT_SPECIFIER_ieee_ulp_eq ( ...)
Value:
(TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_actual, "actual", CRI_MKNODE_DEF), \
(TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_expected, "expected", CRI_MKNODE_DEF), \
(SINGLE, size_t, cri_ulp, "ulp", CRI_MKNODE_ULPS) \
), __VA_ARGS__)
#define CRI_MKNODE_ULPS
Definition ieee.h:92
#define CRI_IEEE_ULP_T_EQ(Tag, Lhs, Rhs, Ulp)
Definition ieee.h:63
#define CRI_IEEE_ULP_EQ(Lhs, Rhs, Ulp)
Definition ieee.h:58

Definition at line 96 of file ieee.h.

96#define CRI_ASSERT_SPECIFIER_ieee_ulp_eq(...) \
97 CRI_ASSERT_SPECIFIER_OP(CRI_IEEE_ULP_T_EQ, CRI_IEEE_ULP_EQ, ieee_ulp_eq, ( \
98 (TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_actual, "actual", CRI_MKNODE_DEF), \
99 (TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_expected, "expected", CRI_MKNODE_DEF), \
100 (SINGLE, size_t, cri_ulp, "ulp", CRI_MKNODE_ULPS) \
101 ), __VA_ARGS__)

◆ CRI_ASSERT_SPECIFIER_ieee_ulp_ne

#define CRI_ASSERT_SPECIFIER_ieee_ulp_ne ( ...)
Value:
(TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_actual, "actual", CRI_MKNODE_DEF), \
(TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_expected, "unexpected", CRI_MKNODE_DEF), \
(SINGLE, size_t, cri_ulp, "ulp", CRI_MKNODE_ULPS) \
), __VA_ARGS__)
#define CRI_IEEE_ULP_NE(Lhs, Rhs, Ulp)
Definition ieee.h:60
#define CRI_IEEE_ULP_T_NE(Tag, Lhs, Rhs, Ulp)
Definition ieee.h:66

Definition at line 104 of file ieee.h.

104#define CRI_ASSERT_SPECIFIER_ieee_ulp_ne(...) \
105 CRI_ASSERT_SPECIFIER_OP(CRI_IEEE_ULP_T_NE, CRI_IEEE_ULP_NE, ieee_ulp_ne, ( \
106 (TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_actual, "actual", CRI_MKNODE_DEF), \
107 (TAGGED, CRI_AS_GETTYPE(__VA_ARGS__), cri_expected, "unexpected", CRI_MKNODE_DEF), \
108 (SINGLE, size_t, cri_ulp, "ulp", CRI_MKNODE_ULPS) \
109 ), __VA_ARGS__)

◆ CRI_ASSERT_TEST_SPECIFIER_epsilon_eq

#define CRI_ASSERT_TEST_SPECIFIER_epsilon_eq ( ...)    ,

Definition at line 131 of file ieee.h.

◆ CRI_ASSERT_TEST_SPECIFIER_epsilon_ne

#define CRI_ASSERT_TEST_SPECIFIER_epsilon_ne ( ...)    ,

Definition at line 139 of file ieee.h.

◆ CRI_ASSERT_TEST_SPECIFIER_ieee_ulp_eq

#define CRI_ASSERT_TEST_SPECIFIER_ieee_ulp_eq ( ...)    ,

Definition at line 95 of file ieee.h.

◆ CRI_ASSERT_TEST_SPECIFIER_ieee_ulp_ne

#define CRI_ASSERT_TEST_SPECIFIER_ieee_ulp_ne ( ...)    ,

Definition at line 103 of file ieee.h.

◆ CRI_DEFINE_IEEE_ULP_EQ

#define CRI_DEFINE_IEEE_ULP_EQ ( Tag,
Suffix )
Value:
static inline int CRI_USER_TAG_ID(ieee_ulp_eq, Tag)( \
CRI_ASSERT_TYPE_TAG(Tag) a, \
CRI_ASSERT_TYPE_TAG(Tag) b, size_t ulp) \
{ \
if (ulp == 0) \
return a == b; \
a = nextafter ## Suffix(a, b); \
return a == b ? 1 : CRI_USER_TAG_ID(ieee_ulp_eq, Tag)(a, b, ulp - 1); \
}
#define CRI_USER_TAG_ID(Id, Tag)
Definition tag.h:40

Definition at line 71 of file ieee.h.

71# define CRI_DEFINE_IEEE_ULP_EQ(Tag, Suffix) \
72 static inline int CRI_USER_TAG_ID(ieee_ulp_eq, Tag)( \
73 CRI_ASSERT_TYPE_TAG(Tag) a, \
74 CRI_ASSERT_TYPE_TAG(Tag) b, size_t ulp) \
75 { \
76 if (ulp == 0) \
77 return a == b; \
78 a = nextafter ## Suffix(a, b); \
79 return a == b ? 1 : CRI_USER_TAG_ID(ieee_ulp_eq, Tag)(a, b, ulp - 1); \
80 }

◆ CRI_EPS_TYPE

#define CRI_EPS_TYPE   long double

Definition at line 128 of file ieee.h.

◆ CRI_EPSILON_EQ

#define CRI_EPSILON_EQ ( Lhs,
Rhs,
Eps )    (((Rhs) == (Lhs)) || ((Rhs) - (Lhs) <= (Eps) && (Lhs) - (Rhs) <= (Eps)))

Definition at line 113 of file ieee.h.

113#define CRI_EPSILON_EQ(Lhs, Rhs, Eps) \
114 (((Rhs) == (Lhs)) || ((Rhs) - (Lhs) <= (Eps) && (Lhs) - (Rhs) <= (Eps)))

◆ CRI_EPSILON_NE

#define CRI_EPSILON_NE ( Lhs,
Rhs,
Eps )   !CRI_EPSILON_EQ(Lhs, Rhs, Eps)

Definition at line 116 of file ieee.h.

◆ CRI_EPSILON_T_EQ

#define CRI_EPSILON_T_EQ ( Tag,
Lhs,
Rhs,
Eps )   CRI_EPSILON_EQ(Lhs, Rhs, Eps)

Definition at line 118 of file ieee.h.

◆ CRI_EPSILON_T_NE

#define CRI_EPSILON_T_NE ( Tag,
Lhs,
Rhs,
Eps )   CRI_EPSILON_NE(Lhs, Rhs, Eps)

Definition at line 119 of file ieee.h.

◆ CRI_IEEE_ULP_EQ

#define CRI_IEEE_ULP_EQ ( Lhs,
Rhs,
Ulp )    CR_COMPILE_ERROR(ieee_ulp_eq without a tag parameter is unsupported on this compiler.)

Definition at line 58 of file ieee.h.

58# define CRI_IEEE_ULP_EQ(Lhs, Rhs, Ulp) \
59 CR_COMPILE_ERROR(ieee_ulp_eq without a tag parameter is unsupported on this compiler.)

◆ CRI_IEEE_ULP_NE

#define CRI_IEEE_ULP_NE ( Lhs,
Rhs,
Ulp )    CR_COMPILE_ERROR(ieee_ulp_ne without a tag parameter is unsupported on this compiler.)

Definition at line 60 of file ieee.h.

60# define CRI_IEEE_ULP_NE(Lhs, Rhs, Ulp) \
61 CR_COMPILE_ERROR(ieee_ulp_ne without a tag parameter is unsupported on this compiler.)

◆ CRI_IEEE_ULP_T_EQ

#define CRI_IEEE_ULP_T_EQ ( Tag,
Lhs,
Rhs,
Ulp )    (CRI_USER_TAG_ID(ieee_ulp_eq, Tag)((Lhs), (Rhs), (Ulp)))

Definition at line 63 of file ieee.h.

63# define CRI_IEEE_ULP_T_EQ(Tag, Lhs, Rhs, Ulp) \
64 (CRI_USER_TAG_ID(ieee_ulp_eq, Tag)((Lhs), (Rhs), (Ulp)))

◆ CRI_IEEE_ULP_T_NE

#define CRI_IEEE_ULP_T_NE ( Tag,
Lhs,
Rhs,
Ulp )    !(CRI_USER_TAG_ID(ieee_ulp_eq, Tag)((Lhs), (Rhs), (Ulp)))

Definition at line 66 of file ieee.h.

66# define CRI_IEEE_ULP_T_NE(Tag, Lhs, Rhs, Ulp) \
67 !(CRI_USER_TAG_ID(ieee_ulp_eq, Tag)((Lhs), (Rhs), (Ulp)))

◆ CRI_MKNODE_EPS

#define CRI_MKNODE_EPS ( _,
Var,
Name )   CRI_MKNODE_STR(ldbl, Var, Name)

Definition at line 127 of file ieee.h.

◆ CRI_MKNODE_EPSS

#define CRI_MKNODE_EPSS   (CRI_MKNODE_EPS, CRI_MKNODE_EPS)

Definition at line 121 of file ieee.h.

◆ CRI_MKNODE_ULP

#define CRI_MKNODE_ULP ( _,
Var,
Name )   CRI_MKNODE_STR(sz, Var, Name)

Definition at line 93 of file ieee.h.

◆ CRI_MKNODE_ULPS

#define CRI_MKNODE_ULPS   (CRI_MKNODE_ULP, CRI_MKNODE_ULP)

Definition at line 92 of file ieee.h.