#include //#include using namespace std; //g++ hoge.cpp (-std=c++17) -I . で実行 #pragma GCC target("avx") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") typedef long long ll; typedef pair prl; typedef vector vcl; typedef map mapl; typedef unordered_map umap; #define pb push_back #define all(v) v.begin(), v.end() #define rep(i,a,b) for(ll i=a;i<=b;i++) #define repi(i,a,b) for(int i=a;i<=b;i++) #define repr(i,a,b) for(ll i=a;i>=b;i--) #define reps(i,v) for(ll i=0;i void chmin(T &a, const T &b) { a = min(a, b); } template void chmax(T &a, const T &b) { a = max(a, b); } ll myceil(ll a, ll b) { return (a+b-1) / b; } //const ll mod = 1e9+7; //const ll mod = 998244353; //typedef modint1000000007 mint; //typedef modint998244353 mint; //typedef modint mint //cout << sum.val() << endl; //mint::set_mod(mod); modが固定でないとき double x,y,z,w; double ht(double a){ return sqrt(a*a+y*y) - sqrt((x/a)*(x/a)+z*z); } int main() { // your code goes here cin >> x >> y >> z >> w; double l = 1e-10, r = 1e7; while((r-l)<1e-7){ double mid = (l+r)/2.0; if(ht(mid)>=w) r = mid; else l = mid; } fprint(x-l*y/2.0-(x/l)*z/2.0-(x/l-y)*(l-z)/2.0); return 0; }