Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenstrtod.c
Go to the documentation of this file.
00001 /* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ 00002 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ 00003 00004 #include <precomp.h> 00005 00006 /* 00007 * @implemented 00008 */ 00009 double 00010 strtod(const char *s, char **sret) 00011 { 00012 long double r; /* result */ 00013 int e; /* exponent */ 00014 long double d; /* scale */ 00015 int sign; /* +- 1.0 */ 00016 int esign; 00017 int i; 00018 int flags=0; 00019 00020 r = 0.0; 00021 sign = 1; 00022 e = 0; 00023 esign = 1; 00024 00025 if (s == NULL) 00026 return r; 00027 00028 00029 while ((*s == ' ') || (*s == '\t')) 00030 s++; 00031 00032 if (*s == '+') 00033 s++; 00034 else if (*s == '-') 00035 { 00036 sign = -1; 00037 s++; 00038 } 00039 00040 while ((*s >= '0') && (*s <= '9')) 00041 { 00042 flags |= 1; 00043 r *= 10.0; 00044 r += *s - '0'; 00045 s++; 00046 } 00047 00048 if (*s == '.') 00049 { 00050 d = 0.1L; 00051 s++; 00052 while ((*s >= '0') && (*s <= '9')) 00053 { 00054 flags |= 2; 00055 r += d * (*s - '0'); 00056 s++; 00057 d *= 0.1L; 00058 } 00059 } 00060 00061 if (flags == 0) 00062 { 00063 if (sret) 00064 *sret = (char *)s; 00065 return 0; 00066 } 00067 00068 if ((*s == 'e') || (*s == 'E')) 00069 { 00070 s++; 00071 if (*s == '+') 00072 s++; 00073 else if (*s == '-') 00074 { 00075 s++; 00076 esign = -1; 00077 } 00078 if ((*s < '0') || (*s > '9')) 00079 { 00080 if (sret) 00081 *sret = (char *)s; 00082 return r; 00083 } 00084 00085 while ((*s >= '0') && (*s <= '9')) 00086 { 00087 e *= 10; 00088 e += *s - '0'; 00089 s++; 00090 } 00091 } 00092 00093 if (esign < 0) 00094 for (i = 1; i <= e; i++) 00095 r *= 0.1L; 00096 else 00097 for (i = 1; i <= e; i++) 00098 r *= 10.0; 00099 00100 if (sret) 00101 *sret = (char *)s; 00102 return r * sign; 00103 } Generated on Sun May 27 2012 04:36:43 for ReactOS by
1.7.6.1
|