1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* math.c (math_cbrt): new method Math.cbrt.

* configure.in (cbrt): check for replacement functions.

* missing/cbrt.c: new file.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2008-02-09 09:36:03 +00:00
parent a424741c8e
commit b160d23c68
4 changed files with 34 additions and 1 deletions

View file

@ -1,3 +1,11 @@
Sat Feb 9 18:34:45 2008 Tanaka Akira <akr@fsij.org>
* math.c (math_cbrt): new method Math.cbrt.
* configure.in (cbrt): check for replacement functions.
* missing/cbrt.c: new file.
Sat Feb 9 17:51:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> Sat Feb 9 17:51:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): use strtod() for more * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): use strtod() for more

View file

@ -649,7 +649,7 @@ esac
AC_FUNC_MEMCMP AC_FUNC_MEMCMP
AC_REPLACE_FUNCS(dup2 memmove strerror strftime\ AC_REPLACE_FUNCS(dup2 memmove strerror strftime\
strchr strstr crypt flock vsnprintf\ 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) strlcpy strlcat)
AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot fsync getcwd eaccess\ AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot fsync getcwd eaccess\
truncate chsize times utimes utimensat fcntl lockf lstat\ truncate chsize times utimes utimensat fcntl lockf lstat\

15
math.c
View file

@ -400,6 +400,20 @@ math_sqrt(VALUE obj, VALUE x)
return DOUBLE2NUM(d); return DOUBLE2NUM(d);
} }
/*
* call-seq:
* Math.cbrt(numeric) => float
*
* Returns the cube root of <i>numeric</i>.
*/
static VALUE
math_cbrt(VALUE obj, VALUE x)
{
Need_Float(x);
return DOUBLE2NUM(cbrt(RFLOAT_VALUE(x)));
}
/* /*
* call-seq: * call-seq:
* Math.frexp(numeric) => [ fraction, exponent ] * Math.frexp(numeric) => [ fraction, exponent ]
@ -611,6 +625,7 @@ Init_Math(void)
rb_define_module_function(rb_mMath, "log2", math_log2, 1); 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, "log10", math_log10, 1);
rb_define_module_function(rb_mMath, "sqrt", math_sqrt, 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, "frexp", math_frexp, 1);
rb_define_module_function(rb_mMath, "ldexp", math_ldexp, 2); rb_define_module_function(rb_mMath, "ldexp", math_ldexp, 2);

10
missing/cbrt.c Normal file
View file

@ -0,0 +1,10 @@
#include <math.h>
double cbrt(double x)
{
if (x < 0)
return -pow(-x, 1/3.0);
else
return pow(x, 1/3.0);
}