simplify some mathematical functions implementations
This commit is contained in:
parent
d58e7d470f
commit
71f67cf771
33
number.c
33
number.c
|
@ -271,7 +271,7 @@ pic_number_abs(pic_state *pic)
|
||||||
pic_get_args(pic, "F", &f, &e);
|
pic_get_args(pic, "F", &f, &e);
|
||||||
|
|
||||||
if (e) {
|
if (e) {
|
||||||
return pic_int_value(fabs(f));
|
return pic_int_value(abs((int)f));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return pic_float_value(fabs(f));
|
return pic_float_value(fabs(f));
|
||||||
|
@ -283,17 +283,23 @@ pic_number_floor2(pic_state *pic)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
bool e1, e2;
|
bool e1, e2;
|
||||||
double q, r;
|
|
||||||
|
|
||||||
pic_get_args(pic, "II", &i, &e1, &j, &e2);
|
pic_get_args(pic, "II", &i, &e1, &j, &e2);
|
||||||
|
|
||||||
q = floor((double)i/j);
|
|
||||||
r = i - j * q;
|
|
||||||
|
|
||||||
if (e1 && e2) {
|
if (e1 && e2) {
|
||||||
return pic_values2(pic, pic_int_value(q), pic_int_value(r));
|
int k;
|
||||||
|
|
||||||
|
k = (i < 0 && j < 0) || (0 <= i && 0 <= j)
|
||||||
|
? i / j
|
||||||
|
: (i / j) - 1;
|
||||||
|
|
||||||
|
return pic_values2(pic, pic_int_value(k), pic_int_value(i - k * j));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
double q, r;
|
||||||
|
|
||||||
|
q = floor((double)i/j);
|
||||||
|
r = i - j * q;
|
||||||
return pic_values2(pic, pic_float_value(q), pic_float_value(r));
|
return pic_values2(pic, pic_float_value(q), pic_float_value(r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -303,17 +309,18 @@ pic_number_trunc2(pic_state *pic)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
bool e1, e2;
|
bool e1, e2;
|
||||||
double q, r;
|
|
||||||
|
|
||||||
pic_get_args(pic, "II", &i, &e1, &j, &e2);
|
pic_get_args(pic, "II", &i, &e1, &j, &e2);
|
||||||
|
|
||||||
q = trunc((double)i/j);
|
|
||||||
r = i - j * q;
|
|
||||||
|
|
||||||
if (e1 && e2) {
|
if (e1 && e2) {
|
||||||
return pic_values2(pic, pic_int_value(q), pic_int_value(r));
|
return pic_values2(pic, pic_int_value(i/j), pic_int_value(i - (i/j) * j));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
double q, r;
|
||||||
|
|
||||||
|
q = trunc((double)i/j);
|
||||||
|
r = i - j * q;
|
||||||
|
|
||||||
return pic_values2(pic, pic_float_value(q), pic_float_value(r));
|
return pic_values2(pic, pic_float_value(q), pic_float_value(r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -516,7 +523,7 @@ pic_number_exact(pic_state *pic)
|
||||||
|
|
||||||
pic_get_args(pic, "f", &f);
|
pic_get_args(pic, "f", &f);
|
||||||
|
|
||||||
return pic_int_value((int)round(f));
|
return pic_int_value((int)(round(f)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static pic_value
|
static pic_value
|
||||||
|
@ -564,7 +571,7 @@ pic_number_string_to_number(pic_state *pic)
|
||||||
num = strtol(str, &eptr, radix);
|
num = strtol(str, &eptr, radix);
|
||||||
if (*eptr == '\0') {
|
if (*eptr == '\0') {
|
||||||
return pic_valid_int(num)
|
return pic_valid_int(num)
|
||||||
? pic_int_value(num)
|
? pic_int_value((int)num)
|
||||||
: pic_float_value(num);
|
: pic_float_value(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue