diff options
author | tadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-04-05 14:25:40 +0000 |
---|---|---|
committer | tadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-04-05 14:25:40 +0000 |
commit | c08b5dfb81c5a79e0c4965ff1a8da07f040c5820 (patch) | |
tree | ae0ca032557e77eb17c4f62f73ccf91dbff37498 /complex.c | |
parent | be710a03919604a1b7776043aecc5cf0914da01c (diff) | |
download | ruby-c08b5dfb81c5a79e0c4965ff1a8da07f040c5820.tar.gz |
* lib/cmath.rb: new.
* lib/complex.rb: depends lib/cmath.rb.
* lib/rational.rb: added rdiv.
* complex.c: removed some math functions.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15906 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'complex.c')
-rw-r--r-- | complex.c | 139 |
1 files changed, 18 insertions, 121 deletions
@@ -474,47 +474,29 @@ nucomp_f_complex(int argc, VALUE *argv, VALUE klass) return rb_funcall2(rb_cComplex, id_convert, argc, argv); } -#if 1 -/* the following code is copied from math.c */ - -#include <errno.h> - -#define Need_Float(x) (x) = rb_Float(x) -#define Need_Float2(x,y) do {\ - Need_Float(x);\ - Need_Float(y);\ -} while (0) - -static void -domain_check(double x, char *msg) -{ - while(1) { - if (errno) { - rb_sys_fail(msg); - } - if (isnan(x)) { -#if defined(EDOM) - errno = EDOM; -#elif defined(ERANGE) - errno = ERANGE; -#endif - continue; - } - break; - } -} +extern VALUE math_atan2(VALUE obj, VALUE x, VALUE y); +extern VALUE math_cos(VALUE obj, VALUE x); +extern VALUE math_cosh(VALUE obj, VALUE x); +extern VALUE math_exp(VALUE obj, VALUE x); +extern VALUE math_log(int argc, VALUE *argv); +extern VALUE math_sin(VALUE obj, VALUE x); +extern VALUE math_sinh(VALUE obj, VALUE x); +extern VALUE math_sqrt(VALUE obj, VALUE x); + +#define m_atan2_bang(x,y) math_atan2(Qnil,x,y) +#define m_cos_bang(x) math_cos(Qnil,x) +#define m_cosh_bang(x) math_cosh(Qnil,x) +#define m_exp_bang(x) math_exp(Qnil,x) static VALUE -m_cos_bang(VALUE x) +m_log_bang(VALUE x) { - Need_Float(x); - return DOUBLE2NUM(cos(RFLOAT_VALUE(x))); + return math_log(1, &x); } -static VALUE m_cos_bang(VALUE); -static VALUE m_cosh_bang(VALUE); -static VALUE m_sin_bang(VALUE); -static VALUE m_sinh_bang(VALUE); +#define m_sin_bang(x) math_sin(Qnil,x) +#define m_sinh_bang(x) math_sinh(Qnil,x) +#define m_sqrt_bang(x) math_sqrt(Qnil,x) static VALUE m_cos(VALUE x) @@ -531,47 +513,6 @@ m_cos(VALUE x) m_sinh_bang(dat->image))); } -#ifndef HAVE_COSH -double -cosh(double x) -{ - return (exp(x) + exp(-x)) / 2; -} -#endif - -static VALUE -m_cosh_bang(VALUE x) -{ - Need_Float(x); - return DOUBLE2NUM(cosh(RFLOAT_VALUE(x))); -} - -static VALUE -m_exp_bang(VALUE x) -{ - Need_Float(x); - return DOUBLE2NUM(exp(RFLOAT_VALUE(x))); -} - -static VALUE -m_log_bang(VALUE x) -{ - double d; - - Need_Float(x); - errno = 0; - d = log(RFLOAT_VALUE(x)); - domain_check(d, "log"); - return DOUBLE2NUM(d); -} - -static VALUE -m_sin_bang(VALUE x) -{ - Need_Float(x); - return DOUBLE2NUM(sin(RFLOAT_VALUE(x))); -} - static VALUE m_sin(VALUE x) { @@ -587,33 +528,6 @@ m_sin(VALUE x) m_sinh_bang(dat->image))); } -#ifndef HAVE_SINH -double -sinh(double x) -{ - return (exp(x) - exp(-x)) / 2; -} -#endif - -static VALUE -m_sinh_bang(VALUE x) -{ - Need_Float(x); - return DOUBLE2NUM(sinh(RFLOAT_VALUE(x))); -} - -static VALUE -m_sqrt_bang(VALUE x) -{ - double d; - - Need_Float(x); - errno = 0; - d = sqrt(RFLOAT_VALUE(x)); - domain_check(d, "sqrt"); - return DOUBLE2NUM(d); -} - static VALUE m_sqrt(VALUE x) { @@ -637,23 +551,6 @@ m_sqrt(VALUE x) } static VALUE -m_atan2_bang(VALUE y, VALUE x) -{ - Need_Float2(y, x); - return DOUBLE2NUM(atan2(RFLOAT_VALUE(y), RFLOAT_VALUE(x))); -} - -#if 0 -static VALUE -m_hypot(VALUE x, VALUE y) -{ - Need_Float2(x, y); - return DOUBLE2NUM(hypot(RFLOAT_VALUE(x), RFLOAT_VALUE(y))); -} -#endif -#endif - -static VALUE nucomp_s_polar(VALUE klass, VALUE abs, VALUE arg) { return f_complex_new2(klass, |