[BACK]Return to strtod.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / gdtoa

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/gdtoa/strtod.c between version 1.4 and 1.5

version 1.4, 2006/06/02 19:46:56 version 1.5, 2008/03/21 23:13:48
Line 523  strtod
Line 523  strtod
         /* Put digits into bd: true value = bd * 10^e */          /* Put digits into bd: true value = bd * 10^e */
   
         bd0 = s2b(s0, nd0, nd, y);          bd0 = s2b(s0, nd0, nd, y);
           if (bd0 == NULL)
                   goto ovfl;
   
         for(;;) {          for(;;) {
                 bd = Balloc(bd0->k);                  bd = Balloc(bd0->k);
                   if (bd == NULL)
                           goto ovfl;
                 Bcopy(bd, bd0);                  Bcopy(bd, bd0);
                 bb = d2b(dval(rv), &bbe, &bbbits);      /* rv = bb * 2^bbe */                  bb = d2b(dval(rv), &bbe, &bbbits);      /* rv = bb * 2^bbe */
                   if (bb == NULL)
                           goto ovfl;
                 bs = i2b(1);                  bs = i2b(1);
                   if (bs == NULL)
                           goto ovfl;
   
                 if (e >= 0) {                  if (e >= 0) {
                         bb2 = bb5 = 0;                          bb2 = bb5 = 0;
Line 585  strtod
Line 593  strtod
                         }                          }
                 if (bb5 > 0) {                  if (bb5 > 0) {
                         bs = pow5mult(bs, bb5);                          bs = pow5mult(bs, bb5);
                           if (bs == NULL)
                                   goto ovfl;
                         bb1 = mult(bs, bb);                          bb1 = mult(bs, bb);
                           if (bb1 == NULL)
                                   goto ovfl;
                         Bfree(bb);                          Bfree(bb);
                         bb = bb1;                          bb = bb1;
                         }                          }
                 if (bb2 > 0)                  if (bb2 > 0) {
                         bb = lshift(bb, bb2);                          bb = lshift(bb, bb2);
                 if (bd5 > 0)                          if (bb == NULL)
                                   goto ovfl;
                           }
                   if (bd5 > 0) {
                         bd = pow5mult(bd, bd5);                          bd = pow5mult(bd, bd5);
                 if (bd2 > 0)                          if (bd == NULL)
                                   goto ovfl;
                           }
                   if (bd2 > 0) {
                         bd = lshift(bd, bd2);                          bd = lshift(bd, bd2);
                 if (bs2 > 0)                          if (bd == NULL)
                                   goto ovfl;
                           }
                   if (bs2 > 0) {
                         bs = lshift(bs, bs2);                          bs = lshift(bs, bs2);
                           if (bs == NULL)
                                   goto ovfl;
                           }
                 delta = diff(bb, bd);                  delta = diff(bb, bd);
                   if (delta == NULL)
                           goto ovfl;
                 dsign = delta->sign;                  dsign = delta->sign;
                 delta->sign = 0;                  delta->sign = 0;
                 i = cmp(delta, bs);                  i = cmp(delta, bs);

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

CVSweb <webmaster@jp.NetBSD.org>