Thread: mulmod failing
View Single Post
Old 2017-06-08, 22:22   #5
retina's Avatar
"The unspeakable one"
Jun 2006
My evil lair

22·17·97 Posts

With the values you gave your code should crash with a divide-by-zero* exception. Unless the calling code has installed an exception handler or something.

Any time the high order word is larger or equal than the divisor the result from div can't fit into a single register.

245,673,636,173 x 245,673,636,173 = 60,355,535,510,463,574,085,929

60,355,535,510,463,574,085,929 / 2,047 = 29,484,873,234,227,442,152 & 785 remainder

Note that 29,484,873,234,227,442,152 cannot fit into a single 64-bit register.

This can also be detected by observing that the high order word of 60,355,535,510,463,574,085,929 is 3,271. So even before the divide is done we can know that it will fail because 3,271 >= 2,047.

* Even though the divisor is not actually zero you will still get the divide-by-zero exception whenever the result is too large.

Last fiddled with by retina on 2017-06-08 at 22:23
retina is online now   Reply With Quote