#include <iostream>
#include <complex>
#include <cstdio>
#include <utility>
using namespace std;
typedef complex<double> P;
typedef pair<P,P> L;
#define X real()
#define Y imag()
double dot(P a, P b){
return a.X * b.X + a.Y * b.Y;
}
double cross(P a, P b){
return a.X * b.Y - a.Y * b.X;
}
L angle_bisector(P a, P b, P c){
//角abcをの二等分線
//a, b or b, cが一致するとゼロ徐算が発生しREになる
P p = b + (a-b)/abs(a-b) + (c-b)/abs(c-b);
return L(b,p);
}
P intersection(L a, L b){
//直線aと直線bの交点
return a.first + cross(b.second-b.first,a.first-b.first)/(-cross(b.second-b.first,a.second-b.first)+cross(b.second-b.first,a.first-b.first))*(a.second-a.first);
}
double p_to_s_dist(P a, L s){
return abs(cross(s.first-s.second,a-s.second))/abs(s.first-s.second);
}
int main(){
P p[3];
double x, y;
for(int i = 0; i < 3; ++i){
cin >> x >> y;
p[i] = P(x,y);
}
L bisectors[3];
for(int i = 0; i < 3; ++i){
bisectors[i] = angle_bisector(p[(i+2)%3],p[i],p[(i+1)%3]);
}
P inner_center = intersection(bisectors[0],bisectors[1]);
double ans = 0.0;
for(int i = 0; i < 3; ++i){
P a = p[i], b = inner_center;
L l = L(p[i],p[(i+1)%3]);
for(int j = 0; j < 10000; ++j){
P m = (a+b)/2.0;
double d1 = p_to_s_dist(m,l)*2;
P k = intersection(bisectors[(i+1)%3], L(m,m+p[(i+1)%3]-p[i]));
double d2 = abs(k-m);
if(d1 < d2){
a = m;
}else{
b = m;
}
}
ans = max(ans,p_to_s_dist((a+b)/2.0,l));
}
printf("%.12f\n",ans);
return 0;
}