distance = ( A, B, AB) => {
const iterations = 5
const r1 = Math.sqrt( A / Math.PI )
const r2 = Math.sqrt( B / Math.PI )
if( AB <= 0 ){ return r1+r2+1 }
else if ( A <= AB || B <= AB){ return 0 }
else{
let x1 = Math.abs( r1-r2 )
let x2 = r1+r2
let y1 = Math.PI * Math.min(r1**2, r2**2)
let y2 = 0
let guess, guessArea
for( let i=0; i<iterations; i++){
guess = (x2-x1) / (y2-y1) * ( AB - y1) + x1
guessArea = area( guess, r1, r2 )
if( guessArea > AB ){
x1 = guess
y1 = guessArea
}else{
x2 = guess
y2 = guessArea
}
}
return (x2-x1) / (y2-y1) * ( AB - y1) + x1
}
}