pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/operators.c:583:
{ FLOAT_TYPE f = 0.0; switch(TYPEOF(Pike_sp[-1])) { case T_INT: f=(FLOAT_TYPE)(Pike_sp[-1].u.integer); break; case T_STRING:
+
#if SIZEOF_FLOAT_TYPE > SIZEOF_DOUBLE
f =
-
+
(FLOAT_TYPE)STRTOLD_PCHARP(MKPCHARP(Pike_sp[-1].u.string->str,
+
Pike_sp[-1].u.string->size_shift),
+
0);
+
#else
+
f =
(FLOAT_TYPE)STRTOD_PCHARP(MKPCHARP(Pike_sp[-1].u.string->str, Pike_sp[-1].u.string->size_shift), 0);
-
+
#endif
free_string(Pike_sp[-1].u.string); break; default: Pike_error("Cannot cast %s to float.\n", get_name_of_type(TYPEOF(Pike_sp[-1]))); } SET_SVAL(Pike_sp[-1], T_FLOAT, 0, float_number, f); break;
pike.git/src/operators.c:1665:
return; } } Pike_sp-=args; push_int(size); break; } case BIT_FLOAT: {
-
double
res = Pike_sp[-args].u.float_number;
+
FLOAT_ARG_TYPE
res = Pike_sp[-args].u.float_number;
for(e=args-1; e>0; e-- ) res += Pike_sp[-e].u.float_number; Pike_sp -= args-1; Pike_sp[-1].u.float_number = res; } break; case BIT_FLOAT|BIT_INT: {
-
double
res = 0.0;
+
FLOAT_ARG_TYPE
res = 0.0;
int i; for(i=0; i<args; i++) if (TYPEOF(Pike_sp[i-args]) == T_FLOAT) res += Pike_sp[i-args].u.float_number; else
-
res += (
double
)Pike_sp[i-args].u.integer;
+
res += (
FLOAT_ARG_TYPE
)Pike_sp[i-args].u.integer;
Pike_sp-=args; push_float(res); return; } #define ADD(TYPE, ADD_FUNC, PUSH_FUNC) do { \ struct TYPE *x = ADD_FUNC (Pike_sp - args, args); \ pop_n_elems (args); \ PUSH_FUNC (x); \ return; \
pike.git/src/operators.c:3680:
/*! @decl object|int|float `**(object|int|float arg1, object|int|float arg2) *! *! Exponentiation. Raise arg1 to the power of arg2. *! */ PMOD_EXPORT void f_exponent(INT32 args) {
-
double
a, b;
+
FLOAT_ARG_TYPE
a, b;
if(args != 2 ) SIMPLE_WRONG_NUM_ARGS_ERROR("`**",2); switch( TWO_TYPES(TYPEOF(Pike_sp[-2]), TYPEOF(Pike_sp[-1])) ) { case TWO_TYPES(T_FLOAT,T_FLOAT): a = Pike_sp[-2].u.float_number; b = Pike_sp[-1].u.float_number; goto res_is_powf; case TWO_TYPES(T_FLOAT,T_INT): a = Pike_sp[-2].u.float_number;
-
b = (
double
)Pike_sp[-1].u.integer;
+
b = (
FLOAT_ARG_TYPE
)Pike_sp[-1].u.integer;
goto res_is_powf; case TWO_TYPES(T_INT,T_FLOAT):
-
a = (
double
)Pike_sp[-2].u.integer;
-
b = (
double
)Pike_sp[-1].u.float_number;
+
a = (
FLOAT_ARG_TYPE
)Pike_sp[-2].u.integer;
+
b = (
FLOAT_ARG_TYPE
)Pike_sp[-1].u.float_number;
res_is_powf: { Pike_sp-=2;
-
+
#if SIZEOF_FLOAT_TYPE > SIZEOF_DOUBLE
+
push_float( powl( a, b ) );
+
#else
push_float( pow( a, b ) );
-
+
#endif
return; } default: stack_swap(); convert_stack_top_to_bignum(); stack_swap(); /* FALLTHRU *//* again (this is the slow path).. */ case TWO_TYPES(T_OBJECT,T_INT): case TWO_TYPES(T_OBJECT,T_FLOAT):