MCPcopy Create free account
hub / github.com/apache/arrow / CheckNotWithinUlp

Function CheckNotWithinUlp

cpp/src/arrow/util/ulp_distance_test.cc:71–96  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

69
70template <typename Float>
71void CheckNotWithinUlp(Float x, Float y, int n_ulp) {
72 CheckNotWithinUlpSingle(x, y, n_ulp);
73 CheckNotWithinUlpSingle(y, x, n_ulp);
74 CheckNotWithinUlpSingle(-x, -y, n_ulp);
75 CheckNotWithinUlpSingle(-y, -x, n_ulp);
76 if (n_ulp > 1) {
77 CheckNotWithinUlpSingle(x, y, n_ulp - 1);
78 CheckNotWithinUlpSingle(y, x, n_ulp - 1);
79 CheckNotWithinUlpSingle(-x, -y, n_ulp - 1);
80 CheckNotWithinUlpSingle(-y, -x, n_ulp - 1);
81 }
82
83 for (int exp : {1, -1, 10, -10}) {
84 Float x_scaled(0);
85 Float y_scaled(0);
86 if constexpr (std::is_same_v<Float, Float16>) {
87 x_scaled = Float16(std::ldexp(x.ToFloat(), exp));
88 y_scaled = Float16(std::ldexp(y.ToFloat(), exp));
89 } else {
90 x_scaled = std::ldexp(x, exp);
91 y_scaled = std::ldexp(y, exp);
92 }
93 CheckNotWithinUlpSingle(x_scaled, y_scaled, n_ulp);
94 CheckNotWithinUlpSingle(y_scaled, x_scaled, n_ulp);
95 }
96}
97
98TEST(TestWithinUlp, Double) {
99 for (double f : {0.0, 1e-20, 1.0, 2345678.9}) {

Callers 1

TESTFunction · 0.85

Calls 3

CheckNotWithinUlpSingleFunction · 0.85
Float16Function · 0.70
ToFloatMethod · 0.45

Tested by

no test coverage detected