avoid lcm overflow

This commit is contained in:
Yuichi Nishiwaki 2014-03-25 12:25:08 +09:00
parent fe56195988
commit abefda9ee9
1 changed files with 4 additions and 4 deletions

View File

@ -20,10 +20,10 @@ gcd(int a, int b)
return b; return b;
} }
static int static double
lcm(int a, int b) lcm(int a, int b)
{ {
return abs(a * b) / gcd(a, b); return fabs((double)a * b) / gcd(a, b);
} }
static pic_value static pic_value
@ -439,7 +439,7 @@ pic_number_lcm(pic_state *pic)
{ {
size_t argc; size_t argc;
pic_value *args; pic_value *args;
int r; double r;
bool e = true; bool e = true;
pic_get_args(pic, "*", &argc, &args); pic_get_args(pic, "*", &argc, &args);
@ -457,7 +457,7 @@ pic_number_lcm(pic_state *pic)
pic_error(pic, "lcm: number required"); pic_error(pic, "lcm: number required");
} }
} }
return e ? pic_int_value(r) : pic_float_value(r); return e && pic_valid_int(r) ? pic_int_value(r) : pic_float_value(r);
} }
static pic_value static pic_value