pike.git / src / encode.c

version» Context lines:

pike.git/src/encode.c:21:   #ifdef _AIX   #include <net/nh.h>   #endif      #ifdef HAVE_NETINET_IN_H   #include <netinet/in.h>   #endif      #include <math.h>    + #ifdef HAVE_FREXP + #define FREXP frexp + #else + double frexp(double x, int *exp) + { +  double ret; +  *exp=(int)ceil(log(x)/log(2.0)); +  ret=(x*pow(2.0,(float)-*exp)); +  return tmp; + } + #endif +  + #ifdef HAVE_FREXP + #define FREXP frexp + #else + double FREXP(double x, int *exp) + { +  double ret; +  *exp=(int)ceil(log(x)/log(2.0)); +  ret=(x*pow(2.0,(float)-*exp)); +  return tmp; + } + #endif +  + #if HAVE_LDEXP + #define LDEXP ldexp + #else + double LDEXP(double x, int exp) + { +  return x * pow(2.0,(double)exp); + } + #endif +  +    struct encode_data   {    struct svalue counter;    struct mapping *encoded;    dynamic_buffer buf;   };      #define addstr(s, l) low_my_binary_strcat((s), (l), &(data->buf))   #define addchar(t) low_my_putchar((t),&(data->buf))   
pike.git/src/encode.c:110:    addstr(val->u.string->str, val->u.string->len);    break;       case T_FLOAT:    {    if(val->u.float_number==0.0)    {    code_entry(T_FLOAT,0,data);    code_entry(T_FLOAT,0,data);    }else{ -  INT32 x,y; -  y=(int)ceil(log(val->u.float_number)/log(2.0))-30; -  x=(int)((val->u.float_number)*pow(2.0,(float)-y)); +  INT32 x; +  int y; +  double tmp; +  +  tmp=FREXP((double)val->u.float_number, &y); +  x=(INT32)((1<<30)*tmp); +  y-=30;    while(x && y && !(x&1))    {    x>>=1;    y++;    }    code_entry(T_FLOAT,x,data);    code_entry(T_FLOAT,y,data);    }    break;    }
pike.git/src/encode.c:273:    break;       case T_FLOAT:    {    INT32 num2=num;       tmp=data->counter;    data->counter.u.integer++;       DECODE(); -  push_float(num2 * pow(2.0, (double) num)); +  push_float(LDEXP((double)num2, num));    break;    }       case T_ARRAY:    {    struct array *a=allocate_array(num);    tmp.type=T_ARRAY;    tmp.u.array=a;    mapping_insert(data->decoded, & data->counter, &tmp);    data->counter.u.integer++;