math.big: replace division with Knuth#25242
Merged
Merged
Conversation
|
Connected to Huly®: V_0.6-24782 |
spytheman
approved these changes
Sep 5, 2025
spytheman
left a comment
Contributor
There was a problem hiding this comment.
Excellent work.
Thank you @tankf33der for improving math.big 🙇🏻 .
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I am pleased and relieved to present a patch for transitioning to
Knuth'sdivision.The patch consists of two parts: the first is a reorganization of division processing to reduce memory reallocation, and the second is Knuth's division itself.
Testing of the new division was conducted on random numbers of random length with over 20 billion runs, and if to-from string conversion is included, the number is even higher. Even special edge-case tests were created for dividing numbers that are multiples of 60 bits.
Division performance will significantly improve. Now, dividing a number with 366k digits by one half its length is over 100+ times faster.
The overall comparison chart of the two division methods is presented below:

To followers: If you have code that uses the math.big module, you have a great opportunity to test it before the merge.