|
From: Derek G. <dgi...@ge...> - 2005-05-12 18:33:45
|
RLIB Gurus--
The RLIB function abs() works only for integers, which explains why =
float values passed to this function break in our reports. I refer you =
to pcode_op_functions.c lines 688 through 701:
gint rlib_pcode_operator_abs(rlib *r, struct rlib_value_stack *vs, =
struct rlib_value *this_field_value) {
689 struct rlib_value *v1, rval_rtn;
690 v1 =3D rlib_value_stack_pop(vs);
691 if(RLIB_VALUE_IS_NUMBER(v1)) {
692 gint64 result =3D =
abs(RLIB_VALUE_GET_AS_NUMBER(v1));
693 rlib_value_free(v1);
694 rlib_value_stack_push(vs, =
rlib_value_new_number(&rval_rtn, result));
695 return TRUE;
696 }
697 rlib_pcode_operator_fatal_execption("abs", 1, v1, NULL, =
NULL);
698 rlib_value_free(v1);
699 rlib_value_stack_push(vs, =
rlib_value_new_error(&rval_rtn));
700 return FALSE;
701 }
It calls only the standard abs() function and doesn't attempt to check =
if the number is a double so that it could instead call the standard =
fabs() function.
I could take a crack at fixing this if you'd prefer, but I wanted to =
bring it to your attention.
Cheers
--
Derek Giromini
Gelber Group, L.L.C.
desk: +1.312.692.2843
pager: +1.312.689.0378
|