Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
e9ce00d8
Commit
e9ce00d8
authored
Jun 13, 2015
by
Damien George
Browse files
py: Implement divmod for mpz bignum.
parent
c5029bcb
Changes
2
Hide whitespace changes
Inline
Side-by-side
py/objint_mpz.c
View file @
e9ce00d8
...
...
@@ -262,6 +262,17 @@ mp_obj_t mp_obj_int_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
mpz_pow_inpl
(
&
res
->
mpz
,
zlhs
,
zrhs
);
break
;
case
MP_BINARY_OP_DIVMOD
:
{
mp_obj_int_t
*
quo
=
mp_obj_int_new_mpz
();
mpz_divmod_inpl
(
&
quo
->
mpz
,
&
res
->
mpz
,
zlhs
,
zrhs
);
// Check signs and do Python style modulo
if
(
zlhs
->
neg
!=
zrhs
->
neg
)
{
mpz_add_inpl
(
&
res
->
mpz
,
&
res
->
mpz
,
zrhs
);
}
mp_obj_t
tuple
[
2
]
=
{
quo
,
res
};
return
mp_obj_new_tuple
(
2
,
tuple
);
}
default:
return
MP_OBJ_NULL
;
// op not supported
}
...
...
tests/basics/builtin_divmod.py
View file @
e9ce00d8
...
...
@@ -14,3 +14,9 @@ try:
except
TypeError
:
print
(
"TypeError"
)
# bignum
l
=
(
1
<<
65
)
+
123
print
(
divmod
(
3
,
l
))
print
(
divmod
(
l
,
5
))
print
(
divmod
(
l
+
3
,
l
))
print
(
divmod
(
l
*
20
,
l
+
2
))
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment