github.com/dominant-strategies/go-quai@v0.28.2/common/big.go (about) 1 // Copyright 2014 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package common 18 19 import ( 20 "math/big" 21 "modernc.org/mathutil" 22 ) 23 24 // Common big integers often used 25 var ( 26 Big0 = big.NewInt(0) 27 Big1 = big.NewInt(1) 28 Big2 = big.NewInt(2) 29 Big3 = big.NewInt(3) 30 Big32 = big.NewInt(32) 31 Big256 = big.NewInt(256) 32 Big257 = big.NewInt(257) 33 Big2e256 = new(big.Int).Exp(big.NewInt(2), big.NewInt(256), big.NewInt(0)) 34 ) 35 36 func BigBitsToBits(original *big.Int) *big.Int { 37 e2e64 := big.NewInt(0).Exp(big.NewInt(2), big.NewInt(64), nil) 38 return big.NewInt(0).Div(original, e2e64) 39 } 40 41 func BitsToBigBits(original *big.Int) *big.Int { 42 c, m := mathutil.BinaryLog(original, 64) 43 bigBits := new(big.Int).Mul(big.NewInt(int64(c)), new(big.Int).Exp(big.NewInt(2), big.NewInt(64), nil)) 44 bigBits = new(big.Int).Add(bigBits, m) 45 return bigBits 46 } 47 48 func BigBitsArrayToBitsArray(original []*big.Int) []*big.Int { 49 e2e64 := big.NewInt(0).Exp(big.NewInt(2), big.NewInt(64), nil) 50 bitsArray := make([]*big.Int, len(original)) 51 for i, bits := range original { 52 bitsArray[i] = big.NewInt(0).Div(bits, e2e64) 53 } 54 55 return bitsArray 56 }