ffmpeg / libavutil / intfloat_readwrite.c @ 5509bffa
History  View  Annotate  Download (1.73 KB)
1 
/*


2 
* portable IEEE float/double read/write functions

3 
*

4 
* Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>

5 
*

6 
* This library is free software; you can redistribute it and/or

7 
* modify it under the terms of the GNU Lesser General Public

8 
* License as published by the Free Software Foundation; either

9 
* version 2 of the License, or (at your option) any later version.

10 
*

11 
* This library is distributed in the hope that it will be useful,

12 
* but WITHOUT ANY WARRANTY; without even the implied warranty of

13 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

14 
* Lesser General Public License for more details.

15 
*

16 
* You should have received a copy of the GNU Lesser General Public

17 
* License along with this library; if not, write to the Free Software

18 
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021101301 USA

19 
*/

20  
21 
/**

22 
* @file intfloat_readwrite.c

23 
* Portable IEEE float/double read/write functions.

24 
*/

25  
26 
#include "common.h" 
27  
28 
double av_int2dbl(int64_t v){

29 
if(v+v > 0xFFELLU<<52) 
30 
return 0.0/0.0; 
31 
return ldexp(((v&((1LL<<52)1)) + (1LL<<52)) * (v>>631), (v>>52&0x7FF)1075); 
32 
} 
33  
34 
float av_int2flt(int32_t v){

35 
if(v+v > 0xFF000000U) 
36 
return 0.0/0.0; 
37 
return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>311), (v>>23&0xFF)150); 
38 
} 
39  
40 
int64_t av_dbl2int(double d){

41 
int e;

42 
if ( !d) return 0; 
43 
else if(dd) return 0x7FF0000000000000LL + ((int64_t)(d<0)<<63) + (d!=d); 
44 
d= frexp(d, &e); 
45 
return (int64_t)(d<0)<<63  (e+1022LL)<<52  (int64_t)((fabs(d)0.5)*(1LL<<53)); 
46 
} 
47  
48 
int32_t av_flt2int(float d){

49 
int e;

50 
if ( !d) return 0; 
51 
else if(dd) return 0x7F800000 + ((d<0)<<31) + (d!=d); 
52 
d= frexp(d, &e); 
53 
return (d<0)<<31  (e+126)<<23  (int64_t)((fabs(d)0.5)*(1<<24)); 
54 
} 