Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit 0309cfd

Browse files
committed
core.math: Use internal approxEqual to allow some inaccuracies on certain hardware
1 parent e04df19 commit 0309cfd

File tree

1 file changed

+25
-19
lines changed

1 file changed

+25
-19
lines changed

src/core/math.d

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -221,26 +221,32 @@ T toPrec(T:real)(real f) { pragma(inline, false); return f; }
221221
r = toPrec!real(d + d);
222222
r = toPrec!real(r + r);
223223

224+
// Comparison tests.
225+
bool approxEqual(T)(T lhs, T rhs)
226+
{
227+
return fabs((lhs - rhs) / rhs) <= 1e-2 || fabs(lhs - rhs) <= 1e-5;
228+
}
229+
224230
enum real PIR = 0xc.90fdaa22168c235p-2;
225231
enum double PID = 0x1.921fb54442d18p+1;
226232
enum float PIF = 0x1.921fb6p+1;
227-
static assert(toPrec!float(PIR) == PIF);
228-
static assert(toPrec!double(PIR) == PID);
229-
static assert(toPrec!real(PIR) == PIR);
230-
static assert(toPrec!float(PID) == PIF);
231-
static assert(toPrec!double(PID) == PID);
232-
static assert(toPrec!real(PID) == PID);
233-
static assert(toPrec!float(PIF) == PIF);
234-
static assert(toPrec!double(PIF) == PIF);
235-
static assert(toPrec!real(PIF) == PIF);
236-
237-
assert(toPrec!float(PIR) == PIF);
238-
assert(toPrec!double(PIR) == PID);
239-
assert(toPrec!real(PIR) == PIR);
240-
assert(toPrec!float(PID) == PIF);
241-
assert(toPrec!double(PID) == PID);
242-
assert(toPrec!real(PID) == PID);
243-
assert(toPrec!float(PIF) == PIF);
244-
assert(toPrec!double(PIF) == PIF);
245-
assert(toPrec!real(PIF) == PIF);
233+
static assert(approxEqual(toPrec!float(PIR), PIF));
234+
static assert(approxEqual(toPrec!double(PIR), PID));
235+
static assert(approxEqual(toPrec!real(PIR), PIR));
236+
static assert(approxEqual(toPrec!float(PID), PIF));
237+
static assert(approxEqual(toPrec!double(PID), PID));
238+
static assert(approxEqual(toPrec!real(PID), PID));
239+
static assert(approxEqual(toPrec!float(PIF), PIF));
240+
static assert(approxEqual(toPrec!double(PIF), PIF));
241+
static assert(approxEqual(toPrec!real(PIF), PIF));
242+
243+
assert(approxEqual(toPrec!float(PIR), PIF));
244+
assert(approxEqual(toPrec!double(PIR), PID));
245+
assert(approxEqual(toPrec!real(PIR), PIR));
246+
assert(approxEqual(toPrec!float(PID), PIF));
247+
assert(approxEqual(toPrec!double(PID), PID));
248+
assert(approxEqual(toPrec!real(PID), PID));
249+
assert(approxEqual(toPrec!float(PIF), PIF));
250+
assert(approxEqual(toPrec!double(PIF), PIF));
251+
assert(approxEqual(toPrec!real(PIF), PIF));
246252
}

0 commit comments

Comments
 (0)