Link
#include <bits/stdc++.h>
using namespace std;
double x1,x2,yy1,y2;
double x3,x4,y3,y4;
double angle1,angle2,d1,d2;
double get_dist(double a,double b,double c,double d){
return sqrt((c-a)*(c-a)+(d-b)*(d-b));
}
double calc(double dist){
double dist1=min(dist,d1),
dist2=min(dist,d2);
double X1=x1+dist1*cos(angle1),
Y1=yy1+dist1*sin(angle1),
X2=x3+dist2*cos(angle2),
Y2=y3+dist2*sin(angle2);
return get_dist(X1,Y1,X2,Y2);
}
double sf(double l,double r){
int times=10000;
while(times--){
double midl=l+(r-l)/3,midr=r-(r-l)/3;
if(calc(midl)>calc(midr))l=midl;
else r=midr;
}
return calc(l);
}
int main()
{
cin>>x1>>yy1>>x2>>y2>>x3>>y3>>x4>>y4;
d1=get_dist(x1,yy1,x2,y2);
d2=get_dist(x3,y3,x4,y4);
angle1=atan2(y2-yy1,x2-x1),
angle2=atan2(y4-y3,x4-x3);
double min1=sf(0,min(d1,d2));
double min2=sf(min(d1,d2),max(d1,d2));
printf("%.12lf",min(min1,min2));
}