diff options
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/internal.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libavutil/internal.h b/libavutil/internal.h index 244e3c0dde..ce168ddfee 100644 --- a/libavutil/internal.h +++ b/libavutil/internal.h @@ -189,15 +189,16 @@ extern const uint8_t ff_sqrt_tab[128]; static inline int ff_sqrt(int a) { int ret=0; - int s; + int s, b; if(a<128) return ff_sqrt_tab[a]; - for(s=15; s>=0; s--){ - int b= (1<<(s*2)) + (ret<<s)*2; + for(s=30; s>=0; s-=2){ + ret+=ret; + b= (1+2*ret)<<s; if(b<=a){ a-=b; - ret+= 1<<s; + ret++; } } return ret; |