LCOV - code coverage report
Current view: top level - src - s_sinf.c (source / functions) Coverage Total Hit
Test: app.info Lines: 66.7 % 27 18
Test Date: 2024-01-11 15:52:50 Functions: 100.0 % 1 1
Branches: 53.6 % 28 15

             Branch data     Line data    Source code
       1                 :             : /* s_sinf.c -- float version of s_sin.c.
       2                 :             :  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
       3                 :             :  * Optimized by Bruce D. Evans.
       4                 :             :  */
       5                 :             : 
       6                 :             : /*
       7                 :             :  * ====================================================
       8                 :             :  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
       9                 :             :  *
      10                 :             :  * Developed at SunPro, a Sun Microsystems, Inc. business.
      11                 :             :  * Permission to use, copy, modify, and distribute this
      12                 :             :  * software is freely granted, provided that this notice
      13                 :             :  * is preserved.
      14                 :             :  * ====================================================
      15                 :             :  */
      16                 :             : 
      17                 :             : #include "cdefs-compat.h"
      18                 :             : //__FBSDID("$FreeBSD: src/lib/msun/src/s_sinf.c,v 1.17 2008/02/25 22:19:17 bde Exp $");
      19                 :             : 
      20                 :             : #include <float.h>
      21                 :             : #include <openlibm_math.h>
      22                 :             : 
      23                 :             : //#define       INLINE_KERNEL_COSDF
      24                 :             : //#define       INLINE_KERNEL_SINDF
      25                 :             : //#define INLINE_REM_PIO2F
      26                 :             : #include "math_private.h"
      27                 :             : //#include "e_rem_pio2f.c"
      28                 :             : //#include "k_cosf.c"
      29                 :             : //#include "k_sinf.c"
      30                 :             : 
      31                 :             : /* Small multiples of pi/2 rounded to double precision. */
      32                 :             : static const double
      33                 :             : s1pio2 = 1*M_PI_2,                      /* 0x3FF921FB, 0x54442D18 */
      34                 :             : s2pio2 = 2*M_PI_2,                      /* 0x400921FB, 0x54442D18 */
      35                 :             : s3pio2 = 3*M_PI_2,                      /* 0x4012D97C, 0x7F3321D2 */
      36                 :             : s4pio2 = 4*M_PI_2;                      /* 0x401921FB, 0x54442D18 */
      37                 :             : 
      38                 :             : OLM_DLLEXPORT float
      39                 :          51 : sinf(float x)
      40                 :             : {
      41                 :             :         double y;
      42                 :             :         int32_t n, hx, ix;
      43                 :             : 
      44                 :          51 :         GET_FLOAT_WORD(hx,x);
      45                 :          51 :         ix = hx & 0x7fffffff;
      46                 :             : 
      47         [ +  + ]:          51 :         if(ix <= 0x3f490fda) {               /* |x| ~<= pi/4 */
      48         [ +  + ]:           6 :             if(ix<0x39800000)                /* |x| < 2**-12 */
      49         [ +  - ]:           3 :                 if(((int)x)==0) return x;       /* x with inexact if x != 0 */
      50                 :           3 :             return __kernel_sindf(x);
      51                 :             :         }
      52         [ +  + ]:          45 :         if(ix<=0x407b53d1) {         /* |x| ~<= 5*pi/4 */
      53         [ +  - ]:          18 :             if(ix<=0x4016cbe3) {     /* |x| ~<= 3pi/4 */
      54         [ +  + ]:          18 :                 if(hx>0)
      55                 :          17 :                     return __kernel_cosdf(x - s1pio2);
      56                 :             :                 else
      57                 :           1 :                     return -__kernel_cosdf(x + s1pio2);
      58                 :             :             } else
      59         [ #  # ]:           0 :                         return __kernel_sindf((hx > 0 ? s2pio2 : -s2pio2) - x);
      60                 :             :         }
      61         [ -  + ]:          27 :         if(ix<=0x40e231d5) {         /* |x| ~<= 9*pi/4 */
      62         [ #  # ]:           0 :             if(ix<=0x40afeddf) {     /* |x| ~<= 7*pi/4 */
      63         [ #  # ]:           0 :                 if(hx>0)
      64                 :           0 :                     return -__kernel_cosdf(x - s3pio2);
      65                 :             :                 else
      66                 :           0 :                     return __kernel_cosdf(x + s3pio2);
      67                 :             :             } else
      68         [ #  # ]:           0 :                         return __kernel_sindf(x + (hx > 0 ? -s4pio2 : s4pio2));
      69                 :             :         }
      70                 :             : 
      71                 :             :     /* sin(Inf or NaN) is NaN */
      72         [ +  + ]:          27 :         else if (ix>=0x7f800000) return x-x;
      73                 :             : 
      74                 :             :     /* general argument reduction needed */
      75                 :             :         else {
      76                 :          24 :             n = __ieee754_rem_pio2f(x,&y);
      77   [ -  +  +  - ]:          24 :             switch(n&3) {
      78                 :           0 :                 case 0: return  __kernel_sindf(y);
      79                 :           8 :                 case 1: return  __kernel_cosdf(y);
      80                 :          16 :                 case 2: return  __kernel_sindf(-y);
      81                 :           0 :                 default:
      82                 :           0 :                                 return -__kernel_cosdf(y);
      83                 :             :             }
      84                 :             :         }
      85                 :             : }
        

Generated by: LCOV version 2.0-115.g950771e