Skip to content

Commit

Permalink
Merge pull request #14 from ethereum/integer-sqrt
Browse files Browse the repository at this point in the history
add more robust int_sqrt implementation
  • Loading branch information
djrtwo authored Sep 30, 2018
2 parents 64b8869 + 606cb47 commit c198dfa
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions specs/casper_sharding_v2.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -298,16 +298,16 @@ def get_block_hash(active_state, curblock, slot):

`get_block_hash(*, *, h)` should always return the block in the chain at slot `h`, and `get_shards_and_committees_for_slot(*, h)` should not change unless the dynasty changes.

Finally, we abstractly define `int_sqrt(n)` for use in reward/penalty calculations as the largest integer `k` such that `k**2 <= n`. Here is one possible implementation, though clients are free to use their own including standard libraries if available and meet the specification.
Finally, we abstractly define `int_sqrt(n)` for use in reward/penalty calculations as the largest integer `x` such that `x**2 <= n`. Here is one possible implementation, though clients are free to use their own including standard libraries for [integer square root](https://en.wikipedia.org/wiki/Integer_square_root) if available and meet the specification.

```python
def int_sqrt(n):
k = n
while True:
newk = (k + (n // k)) // 2
if newk in (k, k+1):
return k
k = newk
x = n
y = (x + 1) // 2
while y < x:
x = y
y = (x + n // x) // 2
return x
```

### On startup
Expand Down

0 comments on commit c198dfa

Please sign in to comment.