mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Added Math.sqrt() that was missing in math.c, and added relevant test case
This commit is contained in:
+20
@@ -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);
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user