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)