doc: Minor fixes in safegcd_implementation.md
This commit is contained in:
		
							parent
							
								
									74c34e727b
								
							
						
					
					
						commit
						dc9b6853b7
					
				@ -569,8 +569,14 @@ bits efficiently, which is possible on most platforms; it is abstracted here as
 | 
			
		||||
 | 
			
		||||
```python
 | 
			
		||||
def count_trailing_zeros(v):
 | 
			
		||||
    """For a non-zero value v, find z such that v=(d<<z) for some odd d."""
 | 
			
		||||
    return (v & -v).bit_length() - 1
 | 
			
		||||
    """
 | 
			
		||||
    When v is zero, consider all N zero bits as "trailing".
 | 
			
		||||
    For a non-zero value v, find z such that v=(d<<z) for some odd d.
 | 
			
		||||
    """
 | 
			
		||||
    if v == 0:
 | 
			
		||||
        return N
 | 
			
		||||
    else:
 | 
			
		||||
        return (v & -v).bit_length() - 1
 | 
			
		||||
 | 
			
		||||
i = N # divsteps left to do
 | 
			
		||||
while True:
 | 
			
		||||
@ -601,7 +607,7 @@ becomes negative, or when *i* reaches *0*. Combined, this is equivalent to addin
 | 
			
		||||
It is easy to find what that multiple is: we want a number *w* such that *g+w f* has a few bottom
 | 
			
		||||
zero bits. If that number of bits is *L*, we want *g+w f mod 2<sup>L</sup> = 0*, or *w = -g/f mod 2<sup>L</sup>*. Since *f*
 | 
			
		||||
is odd, such a *w* exists for any *L*. *L* cannot be more than *i* steps (as we'd finish the loop before
 | 
			
		||||
doing more) or more than *η+1* steps (as we'd run `eta, f, g = -eta, g, f` at that point), but
 | 
			
		||||
doing more) or more than *η+1* steps (as we'd run `eta, f, g = -eta, g, -f` at that point), but
 | 
			
		||||
apart from that, we're only limited by the complexity of computing *w*.
 | 
			
		||||
 | 
			
		||||
This code demonstrates how to cancel up to 4 bits per step:
 | 
			
		||||
@ -618,7 +624,7 @@ while True:
 | 
			
		||||
        break
 | 
			
		||||
    # We know g is odd now
 | 
			
		||||
    if eta < 0:
 | 
			
		||||
        eta, f, g = -eta, g, f
 | 
			
		||||
        eta, f, g = -eta, g, -f
 | 
			
		||||
    # Compute limit on number of bits to cancel
 | 
			
		||||
    limit = min(min(eta + 1, i), 4)
 | 
			
		||||
    # Compute w = -g/f mod 2**limit, using the table value for -1/f mod 2**4. Note that f is
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user