#include<iostream>
using namespace std;
double getMAX(double A,double B);
double getMIN(double A,double B);
int main(int argc,char** argv){
double ax1,ay1,bx1,by1,ax2,ay2,bx2,by2;
double length,width;
cin >> ax1 >> ay1 >> bx1 >> by1;
cin >> ax2 >> ay2 >> bx2 >> by2;
length = getMIN(getMAX(ax1,bx1),getMAX(ax2,bx2)) - getMAX(getMIN(ax1,bx1),getMIN(ax2,bx2));
width = getMIN(getMAX(ay1,by1),getMAX(ay2,by2)) - getMAX(getMIN(ay1,by1),getMIN(ay2,by2));
if(length < 0){
length = 0;
}
if(width < 0){
width = 0;
}
cout.setf(ios::fixed);
cout.precision(2);
cout << length * width << endl;
return 0;
}
double getMAX(double A,double B){
if(A > B){
return A;
}else{
return B;
}
}
double getMIN(double A,double B){
if(A < B){
return A;
}else{
return B;
}
}
using namespace std;
double getMAX(double A,double B);
double getMIN(double A,double B);
int main(int argc,char** argv){
double ax1,ay1,bx1,by1,ax2,ay2,bx2,by2;
double length,width;
cin >> ax1 >> ay1 >> bx1 >> by1;
cin >> ax2 >> ay2 >> bx2 >> by2;
length = getMIN(getMAX(ax1,bx1),getMAX(ax2,bx2)) - getMAX(getMIN(ax1,bx1),getMIN(ax2,bx2));
width = getMIN(getMAX(ay1,by1),getMAX(ay2,by2)) - getMAX(getMIN(ay1,by1),getMIN(ay2,by2));
if(length < 0){
length = 0;
}
if(width < 0){
width = 0;
}
cout.setf(ios::fixed);
cout.precision(2);
cout << length * width << endl;
return 0;
}
double getMAX(double A,double B){
if(A > B){
return A;
}else{
return B;
}
}
double getMIN(double A,double B){
if(A < B){
return A;
}else{
return B;
}
}