Move binary search to util file
This commit is contained in:
parent
f90b367688
commit
09181f806f
|
@ -4,6 +4,7 @@ import { LimitBet } from './bet'
|
||||||
import { CREATOR_FEE, Fees, LIQUIDITY_FEE, PLATFORM_FEE } from './fees'
|
import { CREATOR_FEE, Fees, LIQUIDITY_FEE, PLATFORM_FEE } from './fees'
|
||||||
import { LiquidityProvision } from './liquidity-provision'
|
import { LiquidityProvision } from './liquidity-provision'
|
||||||
import { computeFills } from './new-bet'
|
import { computeFills } from './new-bet'
|
||||||
|
import { binarySearch } from './util/algos'
|
||||||
import { addObjects } from './util/object'
|
import { addObjects } from './util/object'
|
||||||
|
|
||||||
export type CpmmState = {
|
export type CpmmState = {
|
||||||
|
@ -139,29 +140,6 @@ export function calculateCpmmAmount(
|
||||||
return amount
|
return amount
|
||||||
}
|
}
|
||||||
|
|
||||||
function binarySearch(
|
|
||||||
min: number,
|
|
||||||
max: number,
|
|
||||||
comparator: (x: number) => number
|
|
||||||
) {
|
|
||||||
let mid = 0
|
|
||||||
while (true) {
|
|
||||||
mid = min + (max - min) / 2
|
|
||||||
|
|
||||||
// Break once we've reached max precision.
|
|
||||||
if (mid === min || mid === max) break
|
|
||||||
|
|
||||||
const comparison = comparator(mid)
|
|
||||||
if (comparison === 0) break
|
|
||||||
else if (comparison > 0) {
|
|
||||||
max = mid
|
|
||||||
} else {
|
|
||||||
min = mid
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mid
|
|
||||||
}
|
|
||||||
|
|
||||||
function calculateAmountToBuyShares(
|
function calculateAmountToBuyShares(
|
||||||
state: CpmmState,
|
state: CpmmState,
|
||||||
shares: number,
|
shares: number,
|
||||||
|
|
22
common/util/algos.ts
Normal file
22
common/util/algos.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
export function binarySearch(
|
||||||
|
min: number,
|
||||||
|
max: number,
|
||||||
|
comparator: (x: number) => number
|
||||||
|
) {
|
||||||
|
let mid = 0
|
||||||
|
while (true) {
|
||||||
|
mid = min + (max - min) / 2
|
||||||
|
|
||||||
|
// Break once we've reached max precision.
|
||||||
|
if (mid === min || mid === max) break
|
||||||
|
|
||||||
|
const comparison = comparator(mid)
|
||||||
|
if (comparison === 0) break
|
||||||
|
else if (comparison > 0) {
|
||||||
|
max = mid
|
||||||
|
} else {
|
||||||
|
min = mid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mid
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user