complex.c: use `mrb_num_div_flo` to avoid copying function.

This change relies that `mrb_num_div_flo` does not use `mrb` inside.
parent 092bba64
...@@ -235,19 +235,10 @@ complex_mul(mrb_state *mrb, mrb_value x) ...@@ -235,19 +235,10 @@ complex_mul(mrb_state *mrb, mrb_value x)
} }
} }
mrb_float #ifndef MRB_NO_FLOAT
div_flo(mrb_float x, mrb_float y) mrb_float mrb_num_div_flo(mrb_state*, mrb_float, mrb_float);
{ #define div_flo(x,y) mrb_num_div_flo(NULL, x, y)
if (y != 0.0) { #endif
return x / y;
}
else if (x == 0.0) {
return NAN;
}
else {
return x * (signbit(y) ? -1.0 : 1.0) * INFINITY;
}
}
/* Arithmetic on (significand, exponent) pairs avoids premature overflow in /* Arithmetic on (significand, exponent) pairs avoids premature overflow in
complex division */ complex division */
...@@ -341,8 +332,6 @@ complex_div(mrb_state *mrb, mrb_value self) ...@@ -341,8 +332,6 @@ complex_div(mrb_state *mrb, mrb_value self)
return complex_new(mrb, F(ldexp)(zr.s, zr.x), F(ldexp)(zi.s, zi.x)); return complex_new(mrb, F(ldexp)(zr.s, zr.x), F(ldexp)(zi.s, zi.x));
} }
mrb_float mrb_num_div_flo(mrb_state*, mrb_float, mrb_float);
#ifndef MRB_USE_RATIONAL #ifndef MRB_USE_RATIONAL
mrb_int mrb_num_div_int(mrb_state *mrb, mrb_int x, mrb_int y); mrb_int mrb_num_div_int(mrb_state *mrb, mrb_int x, mrb_int y);
...@@ -365,7 +354,7 @@ int_div(mrb_state *mrb, mrb_value x) ...@@ -365,7 +354,7 @@ int_div(mrb_state *mrb, mrb_value x)
x = complex_new(mrb, (mrb_float)a, 0); x = complex_new(mrb, (mrb_float)a, 0);
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y); return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
default: default:
return mrb_float_value(mrb, div_flo(mrb, (mrb_float)a, mrb_to_flo(mrb, y))); return mrb_float_value(mrb, div_flo((mrb_float)a, mrb_to_flo(mrb, y)));
} }
} }
...@@ -385,7 +374,7 @@ int_quo(mrb_state *mrb, mrb_value x) ...@@ -385,7 +374,7 @@ int_quo(mrb_state *mrb, mrb_value x)
x = complex_new(mrb, (mrb_float)a, 0); x = complex_new(mrb, (mrb_float)a, 0);
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y); return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
default: default:
return mrb_float_value(mrb, mrb_num_div_flo(mrb, (mrb_float)a, mrb_to_flo(mrb, y))); return mrb_float_value(mrb, div_flo((mrb_float)a, mrb_to_flo(mrb, y)));
} }
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment