|  | /**************************************************************** | 
|  |  | 
|  | The author of this software is David M. Gay. | 
|  |  | 
|  | Copyright (C) 1998, 2000 by Lucent Technologies | 
|  | All Rights Reserved | 
|  |  | 
|  | Permission to use, copy, modify, and distribute this software and | 
|  | its documentation for any purpose and without fee is hereby | 
|  | granted, provided that the above copyright notice appear in all | 
|  | copies and that both that the copyright notice and this | 
|  | permission notice and warranty disclaimer appear in supporting | 
|  | documentation, and that the name of Lucent or any of its entities | 
|  | not be used in advertising or publicity pertaining to | 
|  | distribution of the software without specific, written prior | 
|  | permission. | 
|  |  | 
|  | LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | 
|  | INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. | 
|  | IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY | 
|  | SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 
|  | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | 
|  | IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | 
|  | ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF | 
|  | THIS SOFTWARE. | 
|  |  | 
|  | ****************************************************************/ | 
|  |  | 
|  | /* Please send bug reports to David M. Gay (dmg at acm dot org, | 
|  | * with " at " changed at "@" and " dot " changed to ".").	*/ | 
|  |  | 
|  | #include "gdtoaimp.h" | 
|  |  | 
|  | float __strtof (const char *s, char **sp) | 
|  | { | 
|  | static FPI fpi0 = { 24, 1-127-24+1,  254-127-24+1, 1, SI, Int_max }; | 
|  | ULong bits[1]; | 
|  | Long expo; | 
|  | int k; | 
|  | union { ULong L[1]; float f; } u = { { 0 } }; | 
|  | #ifdef Honor_FLT_ROUNDS | 
|  | #include "gdtoa_fltrnds.h" | 
|  | #else | 
|  | #define fpi &fpi0 | 
|  | #endif | 
|  |  | 
|  | k = __strtodg(s, sp, fpi, &expo, bits); | 
|  | switch(k & STRTOG_Retmask) { | 
|  | case STRTOG_NoNumber: | 
|  | case STRTOG_Zero: | 
|  | u.L[0] = 0; | 
|  | break; | 
|  |  | 
|  | case STRTOG_Normal: | 
|  | case STRTOG_NaNbits: | 
|  | u.L[0] = (bits[0] & 0x7fffff) | ((expo + 0x7f + 23) << 23); | 
|  | break; | 
|  |  | 
|  | case STRTOG_Denormal: | 
|  | u.L[0] = bits[0]; | 
|  | break; | 
|  |  | 
|  | case STRTOG_Infinite: | 
|  | u.L[0] = 0x7f800000; | 
|  | break; | 
|  |  | 
|  | case STRTOG_NaN: | 
|  | u.L[0] = f_QNAN; | 
|  | } | 
|  | if (k & STRTOG_Neg) | 
|  | u.L[0] |= 0x80000000L; | 
|  | return u.f; | 
|  | } | 
|  |  | 
|  | float __cdecl | 
|  | __mingw_strtof (const char * __restrict__ src, char ** __restrict__ endptr) | 
|  | __attribute__((alias("__strtof"))); |