#[allow(dead_code)] #[allow(unused_imports)] fn read() -> T { use std::io::*; let stdin = stdin(); let stdin = stdin.lock(); let token: String = stdin .bytes() .map(|c| c.expect("failed to read char") as char) .skip_while(|c| c.is_whitespace()) .take_while(|c| !c.is_whitespace()) .collect(); token.parse().ok().expect("failed to parse token") } fn binary_search(p:f64,q:f64) -> f64 { let (mut lb , mut ub) = (0.0,1e15); for _ in 0..100 { let mid:f64 = (lb + ub) / 2.0; if mid <= q * mid.log2() + p / mid { lb = mid; }else{ ub = mid; } } lb } fn main(){ let p:usize = read(); let q:usize = read(); println!("{}",binary_search(p as f64,q as f64)); }