ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

strtod.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.