1 /* Test for finite value (zero, subnormal, or normal, and not infinite or NaN). 2 Copyright (C) 2007-2021 Free Software Foundation, Inc. 3 4 This file is free software: you can redistribute it and/or modify 5 it under the terms of the GNU Lesser General Public License as 6 published by the Free Software Foundation; either version 3 of the 7 License, or (at your option) any later version. 8 9 This file is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public License 15 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 16 17 /* Written by Ben Pfaff <blp@gnu.org>, 2007. */ 18 19 #include <config.h> 20 21 #include "isnanf-nolibm.h" 22 #include "isnand-nolibm.h" 23 #include "isnanl-nolibm.h" 24 25 /* The "cc" compiler on HP-UX 11.11, when optimizing, simplifies the test 26 x - y == 0.0 to x == y, a simplification which is invalid when x and y 27 are Infinity. Disable this optimization. */ 28 #if defined __hpux && !defined __GNUC__ 29 static float zerof; 30 static double zerod; 31 static long double zerol; 32 #else 33 # define zerof 0.f 34 # define zerod 0. 35 # define zerol 0.L 36 #endif 37 38 int gl_isfinitef (float x) /* */ 39 { 40 return !isnanf (x) && x - x == zerof; 41 } 42 43 int gl_isfinited (double x) /* */ 44 { 45 return !isnand (x) && x - x == zerod; 46 } 47 48 int gl_isfinitel (long double x) /* */ 49 { 50 return !isnanl (x) && x - x == zerol; 51 }