- unsigned result = num;
- while(result*result>num)
- {
- unsigned diff = result*result-num;
- if(diff<result)
- break;
-
- result -= (diff+result)/(result*2);
- }
+ unsigned result = (num>0xFFFF ? 0xFFFF : 0x100);
+ while(result && result*result>=result+num)
+ result -= (result*result+result-num)/(result*2);