| ︙ | | |
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
-
+
|
* for interconverting 'double' and the integer types.
*
* Copyright (c) 2005 by Kevin B. Kenny. All rights reserved.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclStrToD.c,v 1.3 2005/05/10 20:17:42 kennykb Exp $
* RCS: @(#) $Id: tclStrToD.c,v 1.4 2005/05/11 15:39:50 kennykb Exp $
*
*----------------------------------------------------------------------
*/
#include <tclInt.h>
#include <stdio.h>
#include <stdlib.h>
|
| ︙ | | |
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
-
+
|
*/
for ( ; ; ) {
c = *p;
if ( c == '.' && !seenDp ) {
seenDp = 1;
++p;
} else if ( isdigit(c) ) {
} else if ( isdigit( UCHAR(c) ) ) {
if ( c == '0' ) {
if ( startOfSignificand != NULL ) {
++nTrailZero;
}
} else {
if ( startOfSignificand == NULL ) {
startOfSignificand = p;
|
| ︙ | | |
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
|
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
|
-
+
|
*/
exponent = 0;
if ( seenDigit && ( *p == 'e' || *p == 'E' ) ) {
CONST char* stringSave = p;
++p;
c = *p;
if ( isdigit( c ) || c == '+' || c == '-' ) {
if ( isdigit( UCHAR( c ) ) || c == '+' || c == '-' ) {
errno = 0;
exponent = strtol( p, (char**)&p, 10 );
if ( errno == ERANGE ) {
if ( exponent > 0 ) {
v = HUGE_VAL;
} else {
v = 0.0;
|
| ︙ | | |
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
|
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
|
-
+
|
* being multiplied by 5**(M5+exponent).
*/
mp_init( &twoMd ); mp_zero( &twoMd );
i = nSigDigs;
for ( p = sigStart ; ; ++p ) {
char c = *p;
if ( isdigit( c ) ) {
if ( isdigit( UCHAR( c ) ) ) {
mp_mul_d( &twoMd, (unsigned) 10, &twoMd );
mp_add_d( &twoMd, (unsigned) (c - '0'), &twoMd );
--i;
if ( i == 0 ) break;
}
}
for ( i = 0; i <= 8; ++i ) {
|
| ︙ | | |
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
|
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
|
-
+
-
+
|
/* Scan off a hex number in parentheses. Embedded blanks are ok. */
theNaN.iv = 0;
if ( *p == '(' ) {
++p;
for ( ; ; ) {
c = *p++;
if ( isspace(c) ) {
if ( isspace( UCHAR(c) ) ) {
continue;
} else if ( c == ')' ) {
*endPtr = p;
break;
} else if ( isdigit(c) ) {
} else if ( isdigit( UCHAR(c) ) ) {
c -= '0';
} else if ( c >= 'A' && c <= 'F' ) {
c = c - 'A' + 10;
} else if ( c >= 'a' && c <= 'f' ) {
c = c - 'a' + 10;
} else {
theNaN.iv = ( ((Tcl_WideUInt) NAN_START) << 48 )
|
| ︙ | | |