package lookup import ( "math/big" ) // SqrtPriceX96ToPriceWithLookup converts sqrtPriceX96 to a price using lookup tables func SqrtPriceX96ToPriceWithLookup(sqrtPriceX96 *big.Int) *big.Float { // price = (sqrtPriceX96 / 2^96)^2 // price = sqrtPriceX96^2 / 2^192 // Calculate sqrtPriceX96^2 sqrtPriceSquared := new(big.Int).Mul(sqrtPriceX96, sqrtPriceX96) // Convert to big.Float for division price := new(big.Float).SetInt(sqrtPriceSquared) // Divide by 2^192 using lookup table q192 := GetQ192() q192Float := new(big.Float).SetInt(q192) price.Quo(price, q192Float) return price } // PriceToSqrtPriceX96WithLookup converts a price to sqrtPriceX96 using lookup tables func PriceToSqrtPriceX96WithLookup(price *big.Float) *big.Int { // sqrtPriceX96 = sqrt(price) * 2^96 // Calculate sqrt(price) sqrtPrice := new(big.Float).Sqrt(price) // Multiply by 2^96 using lookup table q96Int := GetQ96() q96 := new(big.Float).SetInt(q96Int) sqrtPrice.Mul(sqrtPrice, q96) // Convert to big.Int sqrtPriceX96 := new(big.Int) sqrtPrice.Int(sqrtPriceX96) return sqrtPriceX96 } // TickToSqrtPriceX96WithLookup converts a tick to sqrtPriceX96 using lookup tables func TickToSqrtPriceX96WithLookup(tick int) *big.Int { // sqrtPriceX96 = 1.0001^(tick/2) * 2^96 // Calculate 1.0001^(tick/2) using lookup table sqrt10001 := GetSqrt10001(tick) // Multiply by 2^96 using lookup table q96Int := GetQ96() q96 := new(big.Float).SetInt(q96Int) sqrt10001.Mul(sqrt10001, q96) // Convert to big.Int sqrtPriceX96 := new(big.Int) sqrt10001.Int(sqrtPriceX96) return sqrtPriceX96 }