617
|
1 #include <math.h>
|
|
2
|
|
3 extern int printf(const char *,...);
|
|
4
|
|
5
|
|
6 #if 0
|
|
7 static __inline__ int __inline_signbitf( float __x ) {
|
|
8 union{ float __f; unsigned int __u;
|
|
9 }
|
|
10 __u = {__x};
|
|
11 return (int)(__u.__u >> 31);
|
|
12 }
|
|
13
|
|
14 static __inline__ int __inline_isnormalf( float __x ) {
|
|
15 float fabsf = __builtin_fabsf(__x);
|
|
16 if( __x != __x ) return 0;
|
|
17 return fabsf < __builtin_inff() && fabsf >= __FLT_MIN__;
|
|
18 }
|
|
19
|
|
20 extern double scalb ( double, double ) __asm("_scalb$UNIX2003" );
|
|
21 #endif
|
|
22
|
|
23
|
|
24 double fabs0(double a)
|
|
25 {
|
|
26 return __builtin_fabs(a);
|
|
27 }
|
|
28
|
|
29 float fabsf0(float a)
|
|
30 {
|
|
31 return __builtin_fabsf(a);
|
|
32 }
|
|
33
|
|
34
|
|
35
|
|
36 int main()
|
|
37 {
|
|
38 float a = 0.3;
|
|
39 double d = 0.3;
|
|
40 float f ;
|
|
41 double dd ;
|
|
42 int i,j;
|
|
43 i = __inline_signbitf(a);
|
|
44 j = __inline_isnormalf(a);
|
|
45 d = scalb( d, d );
|
|
46
|
|
47 dd = __builtin_inf();
|
|
48 printf("inf %g\n",dd);
|
|
49 f = __builtin_inff();
|
|
50 printf("inff %g\n",f);
|
|
51 // printf("scalb %g\n",d);
|
|
52
|
|
53 d = -0.3;
|
|
54
|
|
55 printf("%d %d %g\n",i,j,d);
|
|
56 printf("%g %g\n",fabs0(d),fabsf0(d));
|
|
57 printf("%g %g\n",fabs0(-d),fabsf0(-d));
|
|
58 }
|