Added Math.sqrt() that was missing in math.c, and added relevant test case

This commit is contained in:
Paolo Bosetti
2012-06-04 15:56:51 -07:00
parent ab3c178a5f
commit 2c7cee8a1a
2 changed files with 30 additions and 0 deletions
+20
View File
@@ -463,6 +463,25 @@ math_log10(mrb_state *mrb, mrb_value obj)
return mrb_float_value(x);
}
/*
* call-seq:
* Math.sqrt(numeric) -> float
*
* Returns the square root of <i>numeric</i>.
*
*/
static mrb_value
math_sqrt(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = sqrt(x);
return mrb_float_value(x);
}
/*
* call-seq:
* Math.cbrt(numeric) -> float
@@ -646,6 +665,7 @@ mrb_init_math(mrb_state *mrb)
mrb_define_module_function(mrb, mrb_math, "log", math_log, -1);
mrb_define_module_function(mrb, mrb_math, "log2", math_log2, 1);
mrb_define_module_function(mrb, mrb_math, "log10", math_log10, 1);
mrb_define_module_function(mrb, mrb_math, "sqrt", math_sqrt, 1);
mrb_define_module_function(mrb, mrb_math, "cbrt", math_cbrt, 1);
mrb_define_module_function(mrb, mrb_math, "frexp", math_frexp, 1);
+10
View File
@@ -76,6 +76,16 @@ assert('Math.log10 10**100') do
check_float(Math.log10(10**100), 100.0)
end
assert('Math.sqrt') do
num = [0.0, 1.0, 2.0, 3.0, 4.0]
sqr = [0, 1, 4, 9, 16]
result = true
sqr.each_with_index do |v,i|
result &= check_float(Math.sqrt(v), num[i])
end
result
end
assert('Math.cbrt') do
num = [-2.0, -1.0, 0.0, 1.0, 2.0]
cub = [-8, -1, 0, 1, 8]