diff --git a/dnn/arch.h b/dnn/arch.h
index 52de62334b71a7d07fac3daa4ae6c104d63d0718..0f29b49f990d71ffe44fcda8c79ac500117d64d1 100644
--- a/dnn/arch.h
+++ b/dnn/arch.h
@@ -157,22 +157,6 @@ typedef float celt_sig;
 typedef float celt_norm;
 typedef float celt_ener;
 
-#ifdef FLOAT_APPROX
-/* This code should reliably detect NaN/inf even when -ffast-math is used.
-   Assumes IEEE 754 format. */
-static OPUS_INLINE int celt_isnan(float x)
-{
-   union {float f; opus_uint32 i;} in;
-   in.f = x;
-   return ((in.i>>23)&0xFF)==0xFF && (in.i&0x007FFFFF)!=0;
-}
-#else
-#ifdef __FAST_MATH__
-#error Cannot build libopus with -ffast-math unless FLOAT_APPROX is defined. This could result in crashes on extreme (e.g. NaN) input
-#endif
-#define celt_isnan(x) ((x)!=(x))
-#endif
-
 #define Q15ONE 1.0f
 
 #define NORM_SCALING 1.f
diff --git a/dnn/vec.h b/dnn/vec.h
index 3853d844a274bce49801fe39e0f478db5a1e4826..0b9c289f43df4b107483f34590b1d07a11118f7e 100644
--- a/dnn/vec.h
+++ b/dnn/vec.h
@@ -52,22 +52,13 @@ static float tansig_approx(float x)
     int i;
     float y, dy;
     float sign=1;
-    /* Tests are reversed to catch NaNs */
-    if (!(x<8))
-        return 1;
-    if (!(x>-8))
-        return -1;
-#ifndef FIXED_POINT
-    /* Another check in case of -ffast-math */
-    if (celt_isnan(x))
-       return 0;
-#endif
     if (x<0)
     {
        x=-x;
        sign=-1;
     }
     i = (int)floor(.5f+25*x);
+    i = IMAX(0, IMIN(200, i));
     x -= .04f*i;
     y = tansig_table[i];
     dy = 1-y*y;