Extract part of ecma_op_number_remainder (ECMA-262 v5, 11.5.3), corresponding to item 6 (actual remainder calculation, without handling of NaN. Infinity and zero values), as ecma_number_calc_remainder.
JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
@@ -707,6 +707,33 @@ ecma_number_trunc (ecma_number_t num) /**< ecma-number */
|
|||||||
}
|
}
|
||||||
} /* ecma_number_trunc */
|
} /* ecma_number_trunc */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate remainder of division of two numbers,
|
||||||
|
* as specified in ECMA-262 v5, 11.5.3, item 6.
|
||||||
|
*
|
||||||
|
* Note:
|
||||||
|
* operands shouldn't contain NaN, Infinity, or zero.
|
||||||
|
*
|
||||||
|
* @return number - calculated remainder.
|
||||||
|
*/
|
||||||
|
ecma_number_t
|
||||||
|
ecma_number_calc_remainder (ecma_number_t left_num, /**< left operand */
|
||||||
|
ecma_number_t right_num) /**< right operand */
|
||||||
|
{
|
||||||
|
ecma_number_t n = left_num, d = right_num;
|
||||||
|
|
||||||
|
JERRY_ASSERT (!ecma_number_is_nan (n)
|
||||||
|
&& !ecma_number_is_zero (n)
|
||||||
|
&& !ecma_number_is_infinity (n));
|
||||||
|
JERRY_ASSERT (!ecma_number_is_nan (d)
|
||||||
|
&& !ecma_number_is_zero (d)
|
||||||
|
&& !ecma_number_is_infinity (d));
|
||||||
|
|
||||||
|
ecma_number_t q = ecma_number_trunc (ecma_number_divide (n, d));
|
||||||
|
|
||||||
|
return ecma_number_substract (n, ecma_number_multiply (d, q));
|
||||||
|
} /* ecma_number_calc_remainder */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ECMA-number addition.
|
* ECMA-number addition.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -185,6 +185,7 @@ extern ecma_number_t ecma_number_get_prev (ecma_number_t num);
|
|||||||
extern ecma_number_t ecma_number_get_next (ecma_number_t num);
|
extern ecma_number_t ecma_number_get_next (ecma_number_t num);
|
||||||
extern ecma_number_t ecma_number_negate (ecma_number_t num);
|
extern ecma_number_t ecma_number_negate (ecma_number_t num);
|
||||||
extern ecma_number_t ecma_number_trunc (ecma_number_t num);
|
extern ecma_number_t ecma_number_trunc (ecma_number_t num);
|
||||||
|
extern ecma_number_t ecma_number_calc_remainder (ecma_number_t left_num, ecma_number_t right_num);
|
||||||
extern ecma_number_t ecma_number_add (ecma_number_t left_num, ecma_number_t right_num);
|
extern ecma_number_t ecma_number_add (ecma_number_t left_num, ecma_number_t right_num);
|
||||||
extern ecma_number_t ecma_number_substract (ecma_number_t left_num, ecma_number_t right_num);
|
extern ecma_number_t ecma_number_substract (ecma_number_t left_num, ecma_number_t right_num);
|
||||||
extern ecma_number_t ecma_number_multiply (ecma_number_t left_num, ecma_number_t right_num);
|
extern ecma_number_t ecma_number_multiply (ecma_number_t left_num, ecma_number_t right_num);
|
||||||
|
|||||||
@@ -38,8 +38,6 @@ ecma_number_t
|
|||||||
ecma_op_number_remainder (ecma_number_t left_num, /**< left operand */
|
ecma_op_number_remainder (ecma_number_t left_num, /**< left operand */
|
||||||
ecma_number_t right_num) /**< right operand */
|
ecma_number_t right_num) /**< right operand */
|
||||||
{
|
{
|
||||||
TODO (Check precision);
|
|
||||||
|
|
||||||
ecma_number_t n = left_num, d = right_num;
|
ecma_number_t n = left_num, d = right_num;
|
||||||
|
|
||||||
if (ecma_number_is_nan (n)
|
if (ecma_number_is_nan (n)
|
||||||
@@ -56,16 +54,7 @@ ecma_op_number_remainder (ecma_number_t left_num, /**< left operand */
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
JERRY_ASSERT (!ecma_number_is_nan (n)
|
return ecma_number_calc_remainder (n, d);
|
||||||
&& !ecma_number_is_zero (n)
|
|
||||||
&& !ecma_number_is_infinity (n));
|
|
||||||
JERRY_ASSERT (!ecma_number_is_nan (d)
|
|
||||||
&& !ecma_number_is_zero (d)
|
|
||||||
&& !ecma_number_is_infinity (d));
|
|
||||||
|
|
||||||
ecma_number_t q = ecma_number_trunc (ecma_number_divide (n, d));
|
|
||||||
|
|
||||||
return ecma_number_substract (n, ecma_number_multiply (d, q));
|
|
||||||
} /* ecma_op_number_remainder */
|
} /* ecma_op_number_remainder */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user