signbitl.c revision 97403
197403Sobrien/* Return nonzero value if number is negative. */ 297403Sobrien 397403Sobrien/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. 497403Sobrien 597403Sobrien This file is part of the GNU ISO C++ Library. This library is free 697403Sobrien software; you can redistribute it and/or modify it under the 797403Sobrien terms of the GNU General Public License as published by the 897403Sobrien Free Software Foundation; either version 2, or (at your option) 997403Sobrien any later version. 1097403Sobrien 1197403Sobrien This library is distributed in the hope that it will be useful, 1297403Sobrien but WITHOUT ANY WARRANTY; without even the implied warranty of 1397403Sobrien MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1497403Sobrien GNU General Public License for more details. 1597403Sobrien 1697403Sobrien You should have received a copy of the GNU General Public License along 1797403Sobrien with this library; see the file COPYING. If not, write to the Free 1897403Sobrien Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 1997403Sobrien USA. 2097403Sobrien 2197403Sobrien As a special exception, you may use this file as part of a free software 2297403Sobrien library without restriction. Specifically, if other files instantiate 2397403Sobrien templates or use macros or inline functions from this file, or you compile 2497403Sobrien this file and link it with other files to produce an executable, this 2597403Sobrien file does not by itself cause the resulting executable to be covered by 2697403Sobrien the GNU General Public License. This exception does not however 2797403Sobrien invalidate any other reasons why the executable file might be covered by 2897403Sobrien the GNU General Public License. */ 2997403Sobrien 3097403Sobrien#include <float.h> 3197403Sobrien#include <math.h> 3297403Sobrien#include "mathconf.h" 3397403Sobrien 3497403Sobrienint 3597403Sobrien__signbitl (long double x) 3697403Sobrien{ 3797403Sobrien#if LDBL_MANT_DIG == 113 3897403Sobrien Int64_t msw; 3997403Sobrien 4097403Sobrien GET_LDOUBLE_MSW64 (msw, x); 4197403Sobrien return msw < 0; 4297403Sobrien#else 4397403Sobrien Int32_t e; 4497403Sobrien 4597403Sobrien GET_LDOUBLE_EXP (e, x); 4697403Sobrien return e & 0x8000; 4797403Sobrien#endif 4897403Sobrien} 49