import math
def floatRange(start, stop, step):
i = start
while i < stop:
yield i
i += step
class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def squareDistTo(self, point):
return (self.x-point.x)**2 + (self.y-point.y)**2
class UnitCircle:
def __init__(self, center=Point(0,0)):
self.center = center
def __contains__(self, point):
return self.center.squareDistTo(point) < 1.0
def overlappingArea(self, other):
if self.center.squareDistTo(other.center) >= 2:
return 0
inSelf = inBoth = 0
for i in floatRange(-1.0, 1.0, 0.002):
for j in floatRange(-1.0, 1.0, 0.002):
p = Point(self.center.x + i, self.center.y + j)
if p in self:
inSelf += 1
if p in other:
inBoth += 1
return math.pi * inBoth / inSelf
if __name__ == '__main__':
x, y, u, w = [float(s) for s in raw_input().split()]
a = UnitCircle(Point(x,y))
b = UnitCircle(Point(u,w))
print 2*math.pi - a.overlappingArea(b)
aW1wb3J0IG1hdGgKCmRlZiBmbG9hdFJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKICAgIGkgPSBzdGFydAogICAgd2hpbGUgaSA8IHN0b3A6CiAgICAgICAgeWllbGQgaQogICAgICAgIGkgKz0gc3RlcAoKY2xhc3MgUG9pbnQ6CiAgICBkZWYgX19pbml0X18oc2VsZiwgeD0wLCB5PTApOgogICAgICAgIHNlbGYueCA9IHgKICAgICAgICBzZWxmLnkgPSB5CgogICAgZGVmIHNxdWFyZURpc3RUbyhzZWxmLCBwb2ludCk6CiAgICAgICAgcmV0dXJuIChzZWxmLngtcG9pbnQueCkqKjIgKyAoc2VsZi55LXBvaW50LnkpKioyCgpjbGFzcyBVbml0Q2lyY2xlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNlbnRlcj1Qb2ludCgwLDApKToKICAgICAgICBzZWxmLmNlbnRlciA9IGNlbnRlcgoKICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgcG9pbnQpOgogICAgICAgIHJldHVybiBzZWxmLmNlbnRlci5zcXVhcmVEaXN0VG8ocG9pbnQpIDwgMS4wCgogICAgZGVmIG92ZXJsYXBwaW5nQXJlYShzZWxmLCBvdGhlcik6CiAgICAgICAgaWYgc2VsZi5jZW50ZXIuc3F1YXJlRGlzdFRvKG90aGVyLmNlbnRlcikgPj0gMjoKICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICBpblNlbGYgPSBpbkJvdGggPSAwCiAgICAgICAgZm9yIGkgaW4gZmxvYXRSYW5nZSgtMS4wLCAxLjAsIDAuMDAyKToKICAgICAgICAgICAgZm9yIGogaW4gZmxvYXRSYW5nZSgtMS4wLCAxLjAsIDAuMDAyKToKICAgICAgICAgICAgICAgIHAgPSBQb2ludChzZWxmLmNlbnRlci54ICsgaSwgc2VsZi5jZW50ZXIueSArIGopCiAgICAgICAgICAgICAgICBpZiBwIGluIHNlbGY6CiAgICAgICAgICAgICAgICAgICAgaW5TZWxmICs9IDEKICAgICAgICAgICAgICAgICAgICBpZiBwIGluIG90aGVyOgogICAgICAgICAgICAgICAgICAgICAgICBpbkJvdGggKz0gMQogICAgICAgIHJldHVybiBtYXRoLnBpICogaW5Cb3RoIC8gaW5TZWxmCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgeCwgeSwgdSwgdyA9IFtmbG9hdChzKSBmb3IgcyBpbiByYXdfaW5wdXQoKS5zcGxpdCgpXQogICAgYSA9IFVuaXRDaXJjbGUoUG9pbnQoeCx5KSkKICAgIGIgPSBVbml0Q2lyY2xlKFBvaW50KHUsdykpCiAgICBwcmludCAyKm1hdGgucGkgLSBhLm92ZXJsYXBwaW5nQXJlYShiKQo=