From: Martin Taibr Date: Mon, 12 Nov 2018 22:27:46 +0000 (+0100) Subject: comment NaN handling X-Git-Tag: xonotic-v0.8.5~1258^2~43 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=c5724c3955aaa0135aebf8875b70a8f91358d582;p=xonotic%2Fxonotic-data.pk3dir.git comment NaN handling --- diff --git a/qcsrc/lib/deglobalization.qh b/qcsrc/lib/deglobalization.qh index 1097035bf..d9417b489 100644 --- a/qcsrc/lib/deglobalization.qh +++ b/qcsrc/lib/deglobalization.qh @@ -20,13 +20,20 @@ #ifdef GAMEQC STATIC_INIT(globals) { // set to NaN to more easily detect uninitialized use - // TODO when all functions are wrapped and the raw functions are not used anymore, - // assert that the global vectors are NaN before calling the raw functions - // to make sure nobody (even builtins) is accidentally using them - NaN is the most likely value to expose remaining usages + // TODO when all functions are wrapped and the raw functions are not used anymore, + // assert that the global vectors are NaN before calling the raw functions + // to make sure nobody (even builtins) is accidentally using them - NaN is the most likely value to expose remaining usages + + // TODO make sure `isnan` actually works - potential compiler bug: + //LOG_INFOF("%f\n", 0.0/0.0 == 0.0/0.0); + //LOG_INFOF("%f\n", 0.0/0.0 != 0.0/0.0); + //float x = 0.0/0.0; + //LOG_INFOF("%f\n", x == x); + //LOG_INFOF("%f\n", x != x); + v_forward = VEC_NAN; v_right = VEC_NAN; v_up = VEC_NAN; - // FIXME check this is actually NaN } #endif diff --git a/qcsrc/lib/vector.qh b/qcsrc/lib/vector.qh index eae8d4397..d49322efb 100644 --- a/qcsrc/lib/vector.qh +++ b/qcsrc/lib/vector.qh @@ -109,6 +109,11 @@ noref vector _vec3; #define VEC_NAN vec3(FLOAT_NAN, FLOAT_NAN, FLOAT_NAN); +ERASEABLE +bool is_all_nans(vector v) { + return isnan(v.x) && isnan(v.y) && isnan(v.z); +} + ERASEABLE vector Rotate(vector v, float a) {