take input 2147395599 as example

Expect output is 46339 (46339^2-2147395599=-92678)

but i think 46340 is better (46340^2-2147395599=1)

and why i can change int sqrt(int x) to int sqrt(float x) without any complie error?

My code comes from Quake-III Arena

```
class Solution {
public:
int sqrt(float x) {
float xhalf = 0.5f*x;
int i = *(int*)&x; // get bits for floating VALUE
i = 0x5f375a86- (i>>1); // gives initial guess y0
x = *(float*)&i; // convert bits BACK to float
x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
return (int)(abs(1/x));
}
};
```