pike.git/
src/
operators.c
Branch:
Tag:
Non-build tags
All tags
No tags
2020-06-06
2020-06-06 14:16:22 by Marcus Comstedt <marcus@mc.pp.se>
9e10fe9c22ae8311635a31fb8e5383ca80bf04d0 (
28
lines) (+
20
/-
8
)
[
Show
|
Annotate
]
Branch:
master
Fix some gratuitous rounding to double with long-double-precision
590:
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;
1672:
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;
1682:
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;
3687:
*/ PMOD_EXPORT void f_exponent(INT32 args) {
-
double
a, b;
+
FLOAT_ARG_TYPE
a, b;
if(args != 2 ) SIMPLE_WRONG_NUM_ARGS_ERROR("`**",2);
3701:
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: