Mercurial > libavcodec.hg
comparison utils.c @ 2800:bf5c4e9dc75a libavcodec
portable IEEE float/double read/write functions
author | michael |
---|---|
date | Tue, 19 Jul 2005 13:29:13 +0000 |
parents | f191093dc8fe |
children | af3a36e20010 |
comparison
equal
deleted
inserted
replaced
2799:924c7e66ced8 | 2800:bf5c4e9dc75a |
---|---|
990 int64_t ff_gcd(int64_t a, int64_t b){ | 990 int64_t ff_gcd(int64_t a, int64_t b){ |
991 if(b) return ff_gcd(b, a%b); | 991 if(b) return ff_gcd(b, a%b); |
992 else return a; | 992 else return a; |
993 } | 993 } |
994 | 994 |
995 double av_int2dbl(int64_t v){ | |
996 if(v+v > 0xFFELLU<<52) | |
997 return 0.0/0.0; | |
998 return ldexp(((v&(1LL<<52)-1) + (1LL<<52)) * (v>>63|1), (v>>52&0x7FF)-1075); | |
999 } | |
1000 | |
1001 float av_int2flt(int32_t v){ | |
1002 if(v+v > 0xFF000000U) | |
1003 return 0.0/0.0; | |
1004 return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>31|1), (v>>23&0xFF)-150); | |
1005 } | |
1006 | |
1007 int64_t av_dbl2int(double d){ | |
1008 int e; | |
1009 if ( !d) return 0; | |
1010 else if(d-d) return 0x7FF0000000000000LL + ((int64_t)(d<0)<<63) + (d!=d); | |
1011 d= frexp(d, &e); | |
1012 return (int64_t)(d<0)<<63 | (e+1022LL)<<52 | (int64_t)((fabs(d)-0.5)*(1LL<<53)); | |
1013 } | |
1014 | |
1015 int32_t av_flt2int(float d){ | |
1016 int e; | |
1017 if ( !d) return 0; | |
1018 else if(d-d) return 0x7F800000 + ((d<0)<<31) + (d!=d); | |
1019 d= frexp(d, &e); | |
1020 return (d<0)<<31 | (e+126)<<23 | (int64_t)((fabs(d)-0.5)*(1<<24)); | |
1021 } | |
1022 | |
995 /* av_log API */ | 1023 /* av_log API */ |
996 | 1024 |
997 static int av_log_level = AV_LOG_INFO; | 1025 static int av_log_level = AV_LOG_INFO; |
998 | 1026 |
999 static void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) | 1027 static void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) |