#include <iostream> 
#include <cmath> 
#include <algorithm>//библиотека, содержащая функции min и max 
using  namespace  std; 
double  perpendicularx( double  x1,double  y1, double  x2, double  y2, double  x3, double  y3)  //функция, которая высчитывает значение абциссы проекции точки на прямую, содержащую отрезок 
{ 
	double  x; 
	x= ( - x1* ( y2- y1) * ( y2- y1) + x3* ( x2- x1) * ( x2- x1) - y1* y2+ y1* y1) / ( ( x2- x1) * ( x2- x1) - ( y2- y1) * ( y2- y1) ) ; 
	return  x; 
} 
double  perpendiculary( double  x1,double  y1, double  x2, double  y2, double  x3, double  y3, double  x) //функция, которая высчитывает значение абциссы проекции точки на прямую, содержащую отрезок 
{ 
	double  y; 
	y= ( x- x1) * ( y2- y1) / ( x2- x1) + y1; 
	return  y; 
} 
int  main( )  { 
	double  x, y, x1, x2, x3, x4, y1, y2, y3, y4, temp; 
	cin >> x1>> y1>> x2>> y2>> x3>> y3>> x4>> y4; 
	double  mini= sqrt ( ( x3- x1) * ( x3- x1) + ( y3- y1) * ( y3- y1) ) ;  //предположим, что минимальное значение, это расстояние от конца одного отрезка до конца другого 
	temp= sqrt ( ( x3- x2) * ( x3- x2) + ( y3- y2) * ( y3- y2) ) ;  //для каждой пары концов разных отрезков высчитываем расстояние между ними 
	if  ( temp< mini) //если оно меньше минимума 
	mini= temp; //то меняем минимум 
	temp= sqrt ( ( x4- x1) * ( x4- x1) + ( y4- y1) * ( y4- y1) ) ; //повторяем для каждой пары концов разных отрезков 
	if  ( temp< mini) 
	mini= temp; 
	temp= sqrt ( ( x4- x2) * ( x4- x2) + ( y4- y2) * ( y4- y2) ) ; 
	if  ( temp< mini) 
	mini= temp; 
	x= perpendicularx( x1, y1, x2, y2, x3, y3) ; //получаем абциссу проекции конца одного отрезка на другой  
	y= perpendiculary( x1, y1, x2, y2, x3, y3, x) ; //ординату 
	if  ( ( x2- x1) * ( x2- x1) - ( y2- y1) * ( y2- y1) == 0 )  //в случае, если равно нулю, абцисса будет равна бесконечности, а это возможно в том случае, если конец отрезка совпадает с его проекцией на другой отрезок 
	{ 
		x= x3;  // для корректных вычислений приравниваем абциссы и ординаты точки с её проекцией 
		y= y3; 
	} 
	if  ( x>= min( x1,x2) && x<= max( x1,x2) && y>= min( y1,y2) && y<= max( y1,y2) )  //если проекция лежит на отрезке заданном 
	{ 
		temp= sqrt ( ( x3- x) * ( x3- x) + ( y3- y) * ( y3- y) ) ; //то проверяем, будет ли расстояние от конца отрезка до её проекции меньше, чем текущий минимум 
		if  ( temp< mini) 
		mini= temp; //если да, то меняем значение минимума 
	} 
	x= perpendicularx( x1, y1, x2, y2, x4, y4) ;  // далее повторяемя для трех других концов отрезков 
	y= perpendiculary( x1, y1, x2, y2, x4, y4, x) ; 
	if  ( ( x2- x1) * ( x2- x1) - ( y2- y1) * ( y2- y1) == 0 ) 
	{ 
		x= x4; 
		y= y4; 
	} 
	if  ( x>= min( x1,x2) && x<= max( x1,x2) && y>= min( y1,y2) && y<= max( y1,y2) ) 
	{ 
		temp= sqrt ( ( x4- x) * ( x4- x) + ( y4- y) * ( y4- y) ) ; 
		if  ( temp< mini) 
		mini= temp; 
	} 
	x= perpendicularx( x3, y3, x4, y4, x1, y1) ; 
	y= perpendiculary( x3, y3, x4, y4, x1, y1, x) ; 
	if  ( ( x4- x3) * ( x4- x3) - ( y4- y3) * ( y4- y3) == 0 ) 
	{ 
		x= x1; 
		y= y1; 
	} 
	if  ( x>= min( x3,x4) && x<= max( x3,x4) && y>= min( y3,y4) && y<= max( y3,y4) ) 
	{ 
		temp= sqrt ( ( x1- x) * ( x1- x) + ( y1- y) * ( y1- y) ) ; 
		if  ( temp< mini) 
		mini= temp; 
	} 
	x= perpendicularx( x3, y3, x4, y4, x2, y2) ; 
	y= perpendiculary( x3, y3, x4, y4, x2, y2, x) ; 
	if  ( ( x4- x3) * ( x4- x3) - ( y4- y3) * ( y4- y3) == 0 ) 
	{ 
		x= x2; 
		y= y2; 
	} 
	if  ( x>= min( x3,x4) && x<= max( x3,x4) && y>= min( y3,y4) && y<= max( y3,y4) ) 
	{ 
		temp= sqrt ( ( x2- x) * ( x2- x) + ( y2- y) * ( y2- y) ) ; 
		if  ( temp< mini) 
		mini= temp; 
	} 
	cout << mini<< endl;  // выводим минимальное расстояние и переходим на новую строку 
	return  0 ; 
} 
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxhbGdvcml0aG0+Ly/QsdC40LHQu9C40L7RgtC10LrQsCwg0YHQvtC00LXRgNC20LDRidCw0Y8g0YTRg9C90LrRhtC40LggbWluINC4IG1heAp1c2luZyBuYW1lc3BhY2Ugc3RkOwpkb3VibGUgcGVycGVuZGljdWxhcngoZG91YmxlIHgxLGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4MywgZG91YmxlIHkzKSAvL9GE0YPQvdC60YbQuNGPLCDQutC+0YLQvtGA0LDRjyDQstGL0YHRh9C40YLRi9Cy0LDQtdGCINC30L3QsNGH0LXQvdC40LUg0LDQsdGG0LjRgdGB0Ysg0L/RgNC+0LXQutGG0LjQuCDRgtC+0YfQutC4INC90LAg0L/RgNGP0LzRg9GOLCDRgdC+0LTQtdGA0LbQsNGJ0YPRjiDQvtGC0YDQtdC30L7Qugp7Cglkb3VibGUgeDsKCXg9KC14MSooeTIteTEpKih5Mi15MSkreDMqKHgyLXgxKSooeDIteDEpLXkxKnkyK3kxKnkxKS8oKHgyLXgxKSooeDIteDEpLSh5Mi15MSkqKHkyLXkxKSk7CglyZXR1cm4geDsKfQpkb3VibGUgcGVycGVuZGljdWxhcnkoZG91YmxlIHgxLGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4MywgZG91YmxlIHkzLCBkb3VibGUgeCkvL9GE0YPQvdC60YbQuNGPLCDQutC+0YLQvtGA0LDRjyDQstGL0YHRh9C40YLRi9Cy0LDQtdGCINC30L3QsNGH0LXQvdC40LUg0LDQsdGG0LjRgdGB0Ysg0L/RgNC+0LXQutGG0LjQuCDRgtC+0YfQutC4INC90LAg0L/RgNGP0LzRg9GOLCDRgdC+0LTQtdGA0LbQsNGJ0YPRjiDQvtGC0YDQtdC30L7Qugp7Cglkb3VibGUgeTsKCXk9KHgteDEpKih5Mi15MSkvKHgyLXgxKSt5MTsKCXJldHVybiB5Owp9CmludCBtYWluKCkgewoJZG91YmxlIHgsIHksIHgxLCB4MiwgeDMsIHg0LCB5MSwgeTIsIHkzLCB5NCwgdGVtcDsKCWNpbj4+eDE+PnkxPj54Mj4+eTI+PngzPj55Mz4+eDQ+Pnk0OwoJZG91YmxlIG1pbmk9c3FydCgoeDMteDEpKih4My14MSkrKHkzLXkxKSooeTMteTEpKTsgLy/Qv9GA0LXQtNC/0L7Qu9C+0LbQuNC8LCDRh9GC0L4g0LzQuNC90LjQvNCw0LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1LCDRjdGC0L4g0YDQsNGB0YHRgtC+0Y/QvdC40LUg0L7RgiDQutC+0L3RhtCwINC+0LTQvdC+0LPQviDQvtGC0YDQtdC30LrQsCDQtNC+INC60L7QvdGG0LAg0LTRgNGD0LPQvtCz0L4KCXRlbXA9c3FydCgoeDMteDIpKih4My14MikrKHkzLXkyKSooeTMteTIpKTsgLy/QtNC70Y8g0LrQsNC20LTQvtC5INC/0LDRgNGLINC60L7QvdGG0L7QsiDRgNCw0LfQvdGL0YUg0L7RgtGA0LXQt9C60L7QsiDQstGL0YHRh9C40YLRi9Cy0LDQtdC8INGA0LDRgdGB0YLQvtGP0L3QuNC1INC80LXQttC00YMg0L3QuNC80LgKCWlmICh0ZW1wPG1pbmkpLy/QtdGB0LvQuCDQvtC90L4g0LzQtdC90YzRiNC1INC80LjQvdC40LzRg9C80LAKCW1pbmk9dGVtcDsvL9GC0L4g0LzQtdC90Y/QtdC8INC80LjQvdC40LzRg9C8Cgl0ZW1wPXNxcnQoKHg0LXgxKSooeDQteDEpKyh5NC15MSkqKHk0LXkxKSk7Ly/Qv9C+0LLRgtC+0YDRj9C10Lwg0LTQu9GPINC60LDQttC00L7QuSDQv9Cw0YDRiyDQutC+0L3RhtC+0LIg0YDQsNC30L3Ri9GFINC+0YLRgNC10LfQutC+0LIKCWlmICh0ZW1wPG1pbmkpCgltaW5pPXRlbXA7Cgl0ZW1wPXNxcnQoKHg0LXgyKSooeDQteDIpKyh5NC15MikqKHk0LXkyKSk7CglpZiAodGVtcDxtaW5pKQoJbWluaT10ZW1wOwoJeD1wZXJwZW5kaWN1bGFyeCh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTsvL9C/0L7Qu9GD0YfQsNC10Lwg0LDQsdGG0LjRgdGB0YMg0L/RgNC+0LXQutGG0LjQuCDQutC+0L3RhtCwINC+0LTQvdC+0LPQviDQvtGC0YDQtdC30LrQsCDQvdCwINC00YDRg9Cz0L7QuSAKCXk9cGVycGVuZGljdWxhcnkoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeCk7Ly/QvtGA0LTQuNC90LDRgtGDCglpZiAoKHgyLXgxKSooeDIteDEpLSh5Mi15MSkqKHkyLXkxKT09MCkgLy/QsiDRgdC70YPRh9Cw0LUsINC10YHQu9C4INGA0LDQstC90L4g0L3Rg9C70Y4sINCw0LHRhtC40YHRgdCwINCx0YPQtNC10YIg0YDQsNCy0L3QsCDQsdC10YHQutC+0L3QtdGH0L3QvtGB0YLQuCwg0LAg0Y3RgtC+INCy0L7Qt9C80L7QttC90L4g0LIg0YLQvtC8INGB0LvRg9GH0LDQtSwg0LXRgdC70Lgg0LrQvtC90LXRhiDQvtGC0YDQtdC30LrQsCDRgdC+0LLQv9Cw0LTQsNC10YIg0YEg0LXQs9C+INC/0YDQvtC10LrRhtC40LXQuSDQvdCwINC00YDRg9Cz0L7QuSDQvtGC0YDQtdC30L7QugoJewoJCXg9eDM7IC8vINC00LvRjyDQutC+0YDRgNC10LrRgtC90YvRhSDQstGL0YfQuNGB0LvQtdC90LjQuSDQv9GA0LjRgNCw0LLQvdC40LLQsNC10Lwg0LDQsdGG0LjRgdGB0Ysg0Lgg0L7RgNC00LjQvdCw0YLRiyDRgtC+0YfQutC4INGBINC10ZEg0L/RgNC+0LXQutGG0LjQtdC5CgkJeT15MzsKCX0KCWlmICh4Pj1taW4oeDEseDIpJiZ4PD1tYXgoeDEseDIpJiZ5Pj1taW4oeTEseTIpJiZ5PD1tYXgoeTEseTIpKSAvL9C10YHQu9C4INC/0YDQvtC10LrRhtC40Y8g0LvQtdC20LjRgiDQvdCwINC+0YLRgNC10LfQutC1INC30LDQtNCw0L3QvdC+0LwKCXsKCQl0ZW1wPXNxcnQoKHgzLXgpKih4My14KSsoeTMteSkqKHkzLXkpKTsvL9GC0L4g0L/RgNC+0LLQtdGA0Y/QtdC8LCDQsdGD0LTQtdGCINC70Lgg0YDQsNGB0YHRgtC+0Y/QvdC40LUg0L7RgiDQutC+0L3RhtCwINC+0YLRgNC10LfQutCwINC00L4g0LXRkSDQv9GA0L7QtdC60YbQuNC4INC80LXQvdGM0YjQtSwg0YfQtdC8INGC0LXQutGD0YnQuNC5INC80LjQvdC40LzRg9C8CgkJaWYgKHRlbXA8bWluaSkKCQltaW5pPXRlbXA7Ly/QtdGB0LvQuCDQtNCwLCDRgtC+INC80LXQvdGP0LXQvCDQt9C90LDRh9C10L3QuNC1INC80LjQvdC40LzRg9C80LAKCX0KCXg9cGVycGVuZGljdWxhcngoeDEsIHkxLCB4MiwgeTIsIHg0LCB5NCk7IC8vINC00LDQu9C10LUg0L/QvtCy0YLQvtGA0Y/QtdC80Y8g0LTQu9GPINGC0YDQtdGFINC00YDRg9Cz0LjRhSDQutC+0L3RhtC+0LIg0L7RgtGA0LXQt9C60L7QsgoJeT1wZXJwZW5kaWN1bGFyeSh4MSwgeTEsIHgyLCB5MiwgeDQsIHk0LCB4KTsKCWlmICgoeDIteDEpKih4Mi14MSktKHkyLXkxKSooeTIteTEpPT0wKQoJewoJCXg9eDQ7CgkJeT15NDsKCX0KCWlmICh4Pj1taW4oeDEseDIpJiZ4PD1tYXgoeDEseDIpJiZ5Pj1taW4oeTEseTIpJiZ5PD1tYXgoeTEseTIpKQoJewoJCXRlbXA9c3FydCgoeDQteCkqKHg0LXgpKyh5NC15KSooeTQteSkpOwoJCWlmICh0ZW1wPG1pbmkpCgkJbWluaT10ZW1wOwoJfQoJeD1wZXJwZW5kaWN1bGFyeCh4MywgeTMsIHg0LCB5NCwgeDEsIHkxKTsKCXk9cGVycGVuZGljdWxhcnkoeDMsIHkzLCB4NCwgeTQsIHgxLCB5MSwgeCk7CglpZiAoKHg0LXgzKSooeDQteDMpLSh5NC15MykqKHk0LXkzKT09MCkKCXsKCQl4PXgxOwoJCXk9eTE7Cgl9CglpZiAoeD49bWluKHgzLHg0KSYmeDw9bWF4KHgzLHg0KSYmeT49bWluKHkzLHk0KSYmeTw9bWF4KHkzLHk0KSkKCXsKCQl0ZW1wPXNxcnQoKHgxLXgpKih4MS14KSsoeTEteSkqKHkxLXkpKTsKCQlpZiAodGVtcDxtaW5pKQoJCW1pbmk9dGVtcDsKCX0KCXg9cGVycGVuZGljdWxhcngoeDMsIHkzLCB4NCwgeTQsIHgyLCB5Mik7Cgl5PXBlcnBlbmRpY3VsYXJ5KHgzLCB5MywgeDQsIHk0LCB4MiwgeTIsIHgpOwoJaWYgKCh4NC14MykqKHg0LXgzKS0oeTQteTMpKih5NC15Myk9PTApCgl7CgkJeD14MjsKCQl5PXkyOwoJfQoJaWYgKHg+PW1pbih4Myx4NCkmJng8PW1heCh4Myx4NCkmJnk+PW1pbih5Myx5NCkmJnk8PW1heCh5Myx5NCkpCgl7CgkJdGVtcD1zcXJ0KCh4Mi14KSooeDIteCkrKHkyLXkpKih5Mi15KSk7CgkJaWYgKHRlbXA8bWluaSkKCQltaW5pPXRlbXA7Cgl9Cgljb3V0PDxtaW5pPDxlbmRsOyAvLyDQstGL0LLQvtC00LjQvCDQvNC40L3QuNC80LDQu9GM0L3QvtC1INGA0LDRgdGB0YLQvtGP0L3QuNC1INC4INC/0LXRgNC10YXQvtC00LjQvCDQvdCwINC90L7QstGD0Y4g0YHRgtGA0L7QutGDCglyZXR1cm4gMDsKfQ==