#include <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0; i<(n); i++)
#define ALL(n) begin(n),end(n)

//////////////////////////////////////////////////////////////////////
// 計算幾何学ライブラリ(CGL)　-ここから-
// 現在のカーソル位置にある単語と同じ単語を一括して選択する：［Ctrl］＋［Shift］＋［L］

////////////
// ベクトル
///////////////////////////////
// 内積：ベクトルaとベクトルbの内積
///////////////////////////////

double Naiseki(vector<double> a,vector<double> b){
    double ip=0;
    for(int i=0; i<a.size(); i++){
        ip+=a[i]*b[i];
    }
    return ip;
}

////////////////////////////////////////////////////////////
// 正射影ベクトル：ベクトルbの，ベクトルaが定める直線に対する正射影ベクトル
////////////////////////////////////////////////////////////

vector<double> Seishaei_vector(vector<double> a,vector<double> b){
    double a_av2=0;
    for(int i=0; i<a.size(); i++){
        a_av2+=a[i]*a[i];
    }

    vector<double> c(a.size());

    for(int i=0; i<a.size(); i++){
        c[i]=c[i]=(Naiseki(a,b)/a_av2)*a[i];
    }

    return c;
}

////////////////////////////////////////////////////////////////////////////
// ベクトルのなす角：ベクトルaとベクトルbのなす角（aまたはbが零ベクトルのとき，エラー）
////////////////////////////////////////////////////////////////////////////

// cosバージョン
double Nasukaku_cos(vector<double> a,vector<double> b){
    double cos_theta=0;

    double a_av=0,b_av=0;
    for(int i=0; i<a.size(); i++){
        a_av+=a[i]*a[i];
        b_av+=b[i]*b[i];
    }
    a_av=sqrt(a_av);
    b_av=sqrt(b_av);

    cos_theta=Naiseki(a,b)/(a_av*b_av);

    return cos_theta;
}

// radバージョン
double Nasukaku(vector<double> a,vector<double> b){
    double theta=0;

    double a_av=0,b_av=0;
    for(int i=0; i<a.size(); i++){
        a_av+=a[i]*a[i];
        b_av+=b[i]*b[i];
    }
    a_av=sqrt(a_av);
    b_av=sqrt(b_av);

    theta=Naiseki(a,b)/(a_av*b_av);
    theta=acos(theta);
    
    return theta;
}

/////////////////////////////////////////////////////////////////////////////////
// 2ベクトルの関係（平行，垂直，それ以外）：平行=2，垂直=1，それ以外=0（ベクトルa,bは零ベクトルでない）
/////////////////////////////////////////////////////////////////////////////////

int vector_PorO(vector<double> A,vector<double> B){
    // 2ベクトルは平行
    if(A[0]/B[0]==A[1]/B[1]||(A[0]==0&&B[0]==0)||(A[1]==0&&B[1]==0)){
        return 2;
    // 2ベクトルは垂直
    }else if(Naiseki(A,B)==0){
        return 1;
    // 2ベクトルは平行でも垂直でもない
    }else{
        return 0;
    }
}


/////////////////
// 距離（座標平面）
/////////////////////////////////////////
// （未検証）2点間の距離：座標平面上の2点a,bの距離
/////////////////////////////////////////

double distance_PP(double xa,double ya,double xb,double yb){
    return sqrt((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya));
}

/////////////////////////////////////////////
// （未検証）点と直線の距離：点Pと2点A,Bを通る直線の距離
/////////////////////////////////////////////

double distance_PL(double x,double y,vector<double> a,vector<double> b){
    vector<double> AP={x-a[0],y-a[1]};
    vector<double> AB={b[0]-a[0],b[1]-a[1]};

    vector<double> AM=Seishaei_vector(AP,AB);
    vector<double> M={AM[0]+a[0],AM[1]+a[1]};

    return distance_PP(x,y,M[0],M[1]);
}    

// 計算幾何学ライブラリ(CGL)　-ここまで-
///////////////////////////////////

int main(){
    double x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;

    cout<<fixed<<setprecision(10)<<distance_PP(x1,y1,x2,y2)<<endl;
}


Measured memory_bytes: 3280