In particular, this gives us desired behavior for NaNs (all compares involving a NaN evaluate to true). This in turn allows writing the canonical isnan() function as "v != v". Added isnan() to the standard library as well.
24 lines
557 B
Plaintext
24 lines
557 B
Plaintext
|
|
export uniform int width() { return programCount; }
|
|
|
|
export void f_v(uniform float RET[]) {
|
|
int errors = 0;
|
|
|
|
foreach (i = 0 ... 65535) {
|
|
unsigned int16 h = i;
|
|
float f = half_to_float(i);
|
|
h = float_to_half(f);
|
|
|
|
int mismatches = (!isnan(f) && i != h);
|
|
if (any(mismatches != 0))
|
|
print("mismatch: orig int16 % -> float % -> half %\n", i, f, h);
|
|
errors += reduce_add(mismatches);
|
|
}
|
|
|
|
RET[programIndex] = errors;
|
|
}
|
|
|
|
export void result(uniform float RET[]) {
|
|
RET[programIndex] = 0;
|
|
}
|