From: Tanaka Akira Date: 2008-02-09T13:03:44+09:00 Subject: [ruby-dev:33667] Math.cbrt ついでに 3乗根の Math.cbrt も作ったんですがどうでしょうか。 cbrt は C99 で定義されています。 Index: math.c =================================================================== --- math.c (revision 15410) +++ math.c (working copy) @@ -402,6 +402,20 @@ math_sqrt(VALUE obj, VALUE x) /* * call-seq: + * Math.cbrt(numeric) => float + * + * Returns the cube root of numeric. + */ + +static VALUE +math_cbrt(VALUE obj, VALUE x) +{ + Need_Float(x); + return DOUBLE2NUM(cbrt(RFLOAT_VALUE(x))); +} + +/* + * call-seq: * Math.frexp(numeric) => [ fraction, exponent ] * * Returns a two-element array containing the normalized fraction (a @@ -603,6 +617,7 @@ Init_Math(void) rb_define_module_function(rb_mMath, "log2", math_log2, 1); rb_define_module_function(rb_mMath, "log10", math_log10, 1); rb_define_module_function(rb_mMath, "sqrt", math_sqrt, 1); + rb_define_module_function(rb_mMath, "cbrt", math_cbrt, 1); rb_define_module_function(rb_mMath, "frexp", math_frexp, 1); rb_define_module_function(rb_mMath, "ldexp", math_ldexp, 2); Index: configure.in =================================================================== --- configure.in (revision 15410) +++ configure.in (working copy) @@ -649,7 +649,7 @@ esac AC_FUNC_MEMCMP AC_REPLACE_FUNCS(dup2 memmove strerror strftime\ strchr strstr crypt flock vsnprintf\ - isnan finite isinf hypot acosh erf tgamma lgamma_r \ + isnan finite isinf hypot acosh erf tgamma lgamma_r cbrt \ strlcpy strlcat) AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot fsync getcwd eaccess\ truncate chsize times utimes utimensat fcntl lockf lstat\ Index: missing/cbrt.c =================================================================== --- missing/cbrt.c (revision 0) +++ missing/cbrt.c (revision 0) @@ -0,0 +1,10 @@ +#include + +double cbrt(double x) +{ + if (x < 0) + return -pow(-x, 1/3.0); + else + return pow(x, 1/3.0); +} + -- [田中 哲][たなか あきら][Tanaka Akira]