summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-complex/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-03-24 13:56:08 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-03-24 13:56:08 +0900
commit5a4958af26747dd47c0cb54d61581f203ed7393c (patch)
tree100296e610b1ea3497d6053ce35a9b9ee8b7e254 /mrbgems/mruby-complex/src
parent092bba64e7694d046299795faa89ec26c033052a (diff)
downloadmruby-5a4958af26747dd47c0cb54d61581f203ed7393c.tar.gz
mruby-5a4958af26747dd47c0cb54d61581f203ed7393c.zip
complex.c: use `mrb_num_div_flo` to avoid copying function.
This change relies that `mrb_num_div_flo` does not use `mrb` inside.
Diffstat (limited to 'mrbgems/mruby-complex/src')
-rw-r--r--mrbgems/mruby-complex/src/complex.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/mrbgems/mruby-complex/src/complex.c b/mrbgems/mruby-complex/src/complex.c
index 5243ac1cc..086ada7ad 100644
--- a/mrbgems/mruby-complex/src/complex.c
+++ b/mrbgems/mruby-complex/src/complex.c
@@ -235,19 +235,10 @@ complex_mul(mrb_state *mrb, mrb_value x)
}
}
-mrb_float
-div_flo(mrb_float x, mrb_float y)
-{
- if (y != 0.0) {
- return x / y;
- }
- else if (x == 0.0) {
- return NAN;
- }
- else {
- return x * (signbit(y) ? -1.0 : 1.0) * INFINITY;
- }
-}
+#ifndef MRB_NO_FLOAT
+mrb_float mrb_num_div_flo(mrb_state*, mrb_float, mrb_float);
+#define div_flo(x,y) mrb_num_div_flo(NULL, x, y)
+#endif
/* Arithmetic on (significand, exponent) pairs avoids premature overflow in
complex division */
@@ -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));
}
-mrb_float mrb_num_div_flo(mrb_state*, mrb_float, mrb_float);
-
#ifndef MRB_USE_RATIONAL
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)
x = complex_new(mrb, (mrb_float)a, 0);
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
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)
x = complex_new(mrb, (mrb_float)a, 0);
return mrb_funcall_id(mrb, x, MRB_OPSYM(div), 1, y);
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