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

             Branch data     Line data    Source code
       1                 :             : /* s_tanf.c -- float version of s_tan.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_tanf.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_TANDF
      24                 :             : //#define INLINE_REM_PIO2F
      25                 :             : #include "math_private.h"
      26                 :             : //#include "e_rem_pio2f.c"
      27                 :             : //#include "k_tanf.c"
      28                 :             : 
      29                 :             : /* Small multiples of pi/2 rounded to double precision. */
      30                 :             : static const double
      31                 :             : t1pio2 = 1*M_PI_2,                      /* 0x3FF921FB, 0x54442D18 */
      32                 :             : t2pio2 = 2*M_PI_2,                      /* 0x400921FB, 0x54442D18 */
      33                 :             : t3pio2 = 3*M_PI_2,                      /* 0x4012D97C, 0x7F3321D2 */
      34                 :             : t4pio2 = 4*M_PI_2;                      /* 0x401921FB, 0x54442D18 */
      35                 :             : 
      36                 :             : OLM_DLLEXPORT float
      37                 :           8 : tanf(float x)
      38                 :             : {
      39                 :             :         double y;
      40                 :             :         int32_t n, hx, ix;
      41                 :             : 
      42                 :           8 :         GET_FLOAT_WORD(hx,x);
      43                 :           8 :         ix = hx & 0x7fffffff;
      44                 :             : 
      45         [ +  + ]:           8 :         if(ix <= 0x3f490fda) {               /* |x| ~<= pi/4 */
      46         [ +  + ]:           4 :             if(ix<0x39800000)                /* |x| < 2**-12 */
      47         [ +  - ]:           3 :                 if(((int)x)==0) return x;       /* x with inexact if x != 0 */
      48                 :           1 :             return __kernel_tandf(x,1);
      49                 :             :         }
      50         [ +  + ]:           4 :         if(ix<=0x407b53d1) {         /* |x| ~<= 5*pi/4 */
      51         [ +  - ]:           1 :             if(ix<=0x4016cbe3)               /* |x| ~<= 3pi/4 */
      52         [ +  - ]:           1 :                 return __kernel_tandf(x + (hx>0 ? -t1pio2 : t1pio2), -1);
      53                 :             :             else
      54         [ #  # ]:           0 :                 return __kernel_tandf(x + (hx>0 ? -t2pio2 : t2pio2), 1);
      55                 :             :         }
      56         [ -  + ]:           3 :         if(ix<=0x40e231d5) {         /* |x| ~<= 9*pi/4 */
      57         [ #  # ]:           0 :             if(ix<=0x40afeddf)               /* |x| ~<= 7*pi/4 */
      58         [ #  # ]:           0 :                 return __kernel_tandf(x + (hx>0 ? -t3pio2 : t3pio2), -1);
      59                 :             :             else
      60         [ #  # ]:           0 :                 return __kernel_tandf(x + (hx>0 ? -t4pio2 : t4pio2), 1);
      61                 :             :         }
      62                 :             : 
      63                 :             :     /* tan(Inf or NaN) is NaN */
      64         [ +  - ]:           3 :         else if (ix>=0x7f800000) return x-x;
      65                 :             : 
      66                 :             :     /* general argument reduction needed */
      67                 :             :         else {
      68                 :           0 :             n = __ieee754_rem_pio2f(x,&y);
      69                 :             :             /* integer parameter: 1 -- n even; -1 -- n odd */
      70                 :           0 :             return __kernel_tandf(y,1-((n&1)<<1));
      71                 :             :         }
      72                 :             : }
        

Generated by: LCOV version 2.0-115.g950771e