14:91f0c87b62a7 | 15:9f5760af87d9 |
---|---|
17 | 17 |
18 typedef struct _NPNum{ | 18 typedef struct _NPNum{ |
19 int type; | 19 int type; |
20 int base; | 20 int base; |
21 bool negative; | 21 bool negative; |
22 long double fval; | 22 double fval; |
23 ulong ival; | 23 ulong ival; |
24 } NPNum; | 24 } NPNum; |
25 | 25 |
26 #define NUM_INIT {0, 0, 0, 0.0, 0} | 26 #define NUM_INIT {0, 0, 0, 0.0, 0} |
27 | 27 |
28 static int npnum_mulbase_add(NPNum *num, long base, long v) | 28 static int npnum_mulbase_add(NPNum *num, long base, long v) |
29 { | 29 { |
30 long double iold=num->ival; | 30 double iold=num->ival; |
31 | 31 |
32 num->fval=num->fval*base+(long double)v; | 32 num->fval=num->fval*base+(double)v; |
33 | 33 |
34 num->ival*=base; | 34 num->ival*=base; |
35 | 35 |
36 if(num->ival<iold) | 36 if(num->ival<iold) |
37 num->type=NPNUM_FLOAT; | 37 num->type=NPNUM_FLOAT; |
167 int base=10; | 167 int base=10; |
168 int dm=1; | 168 int dm=1; |
169 int err=0; | 169 int err=0; |
170 int tmp; | 170 int tmp; |
171 #ifdef NP_SIMPLE_IMPL | 171 #ifdef NP_SIMPLE_IMPL |
172 long double divisor=base; | 172 double divisor=base; |
173 #endif | 173 #endif |
174 | 174 |
175 if(c=='-' || c=='+'){ | 175 if(c=='-' || c=='+'){ |
176 if(c=='-') | 176 if(c=='-') |
177 num->negative=TRUE; | 177 num->negative=TRUE; |
221 if(c>=base) | 221 if(c>=base) |
222 err=E_TOKZ_NUMFMT; | 222 err=E_TOKZ_NUMFMT; |
223 | 223 |
224 #ifdef NP_SIMPLE_IMPL | 224 #ifdef NP_SIMPLE_IMPL |
225 if(dm==3){ | 225 if(dm==3){ |
226 num->fval+=(long double)c/divisor; | 226 num->fval+=(double)c/divisor; |
227 divisor*=base; | 227 divisor*=base; |
228 }else | 228 }else |
229 #endif | 229 #endif |
230 { | 230 { |
231 tmp=npnum_mulbase_add(num, base, c); | 231 tmp=npnum_mulbase_add(num, base, c); |