#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,n) FOR(i,0,n)
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second
template<typename A, typename B> inline bool chmax(A &a, B b) { if (a<b) { a=b; return 1; } return 0; }
template<typename A, typename B> inline bool chmin(A &a, B b) { if (a>b) { a=b; return 1; } return 0; }
typedef long long ll;
typedef pair<int, int> pii;
const ll INF = 1ll<<30;
const ll longINF = 1ll<<60;
const ll MOD = 1000000007;
const double EPS = 1e-9;
const bool debug = 0;
//---------------------------------//

typedef complex<double> Vec;

double dot(Vec a, Vec b) {
	return a.real() * b.real() + a.imag() * b.imag();
}
double cross(Vec a, Vec b) {
	return a.real() * b.imag() - a.imag() * b.real();
}

Vec ver[3];

bool solve(double R) {
	double S = abs(cross(ver[2] - ver[0], ver[1] - ver[0]) / 2.0);
	double edlen[3];
	REP(i, 3) edlen[i] = abs(ver[(i + 1) % 3] - ver[i]);
	double inr = 2*S / accumulate(edlen, edlen + 3, 0.0);
	// inr : inr - R
	if (inr <= R) return false;
	
	double mxlen = *max_element(edlen, edlen + 3);
	
	double aflen = mxlen * (inr - R) / inr;
	return aflen >= 2 * R;
}

int main() {
	REP(i, 3) {
		int x, y;
		scanf("%d %d", &x, &y);
		ver[i] = Vec(x, y);
	}
	
	double l = 0, r = 1000;
	REP(i, 100) {
		double m = (l + r) / 2;
		if (solve(m)) l = m;
		else r = m;
	}
	
	printf("%.15f\n", l);
	
	return 0;
}
